Ekspresi reguler (Regular Expression) menyediakan metode yang efisien dan nyaman untuk pencocokan pola string. Hampir semua bahasa tingkat tinggi menyediakan dukungan untuk ekspresi reguler atau menyediakan pustaka kode siap pakai untuk panggilan. Artikel ini mengambil tugas pemrosesan umum di lingkungan ASP sebagai contoh untuk memperkenalkan keterampilan penerapan ekspresi reguler.
1. Periksa format kata sandi dan alamat email.
Contoh pertama kami menunjukkan fungsi dasar ekspresi reguler: mendeskripsikan string kompleks secara abstrak. Maksudnya adalah ekspresi reguler memberi pemrogram metode deskripsi string formal yang dapat mendeskripsikan pola string apa pun yang ditemukan oleh aplikasi hanya dengan sedikit kode. Misalnya bagi orang yang tidak terlibat dalam pekerjaan teknis, persyaratan format kata sandi dapat dijelaskan sebagai berikut: karakter pertama kata sandi harus berupa huruf, kata sandi minimal harus 4 karakter dan tidak lebih dari 15 karakter, kata sandi tidak boleh berisi selain huruf, angka, dan karakter selain garis bawah.
Sebagai pemrogram, kita harus mengubah deskripsi bahasa alami format kata sandi di atas ke dalam bentuk lain sehingga halaman ASP dapat memahami dan menerapkannya untuk mencegah entri kata sandi ilegal. Ekspresi reguler yang menjelaskan format kata sandi ini adalah: ^[a-zA-Z]w{3,14}$.
Dalam aplikasi ASP, kita dapat menulis proses verifikasi password sebagai fungsi yang dapat digunakan kembali, seperti yang ditunjukkan di bawah ini:
Fungsi TestPassword(strPassword)
Redupkan kembali
Setel re = RegExp baru
re.IgnoreCase = false
re.global = salah
re.Pattern = "^[a-zA-Z]w{3,14}$"
TestPassword = re.Test(strPassword)
Fungsi Akhir
Di bawah ini kita membandingkan ekspresi reguler untuk memeriksa format kata sandi dengan deskripsi bahasa alami:
karakter pertama kata sandi harus berupa huruf: deskripsi ekspresi reguler adalah "^[a-zA-Z]", di mana " ^" menunjukkan awal string, dan tanda hubung memberitahu RegExp untuk mencocokkan semua karakter dalam rentang yang ditentukan.
Kata sandi harus terdiri dari minimal 4 karakter dan tidak lebih dari 15 karakter: deskripsi ekspresi regulernya adalah "{3,14}".
Kata sandi tidak boleh berisi karakter selain huruf, angka, dan garis bawah: deskripsi ekspresi regulernya adalah "w".
Beberapa catatan: {3, 14} berarti pola sebelumnya cocok dengan setidaknya 3 tetapi tidak lebih dari 14 karakter (ditambah karakter pertama menjadi 4 hingga 15 karakter). Perhatikan bahwa sintaksis dalam kurung kurawal sangat ketat dan tidak mengizinkan spasi di kedua sisi koma. Jika spasi ditambahkan, hal ini akan mempengaruhi arti ekspresi reguler dan menyebabkan kesalahan selama verifikasi format kata sandi. Selain itu, karakter "$" tidak ditambahkan di akhir ekspresi reguler di atas. Karakter $ menyebabkan ekspresi reguler mencocokkan string hingga akhir, memastikan kata sandi valid tanpa karakter tambahan apa pun yang mengikutinya.
Mirip dengan verifikasi format kata sandi, memeriksa keabsahan alamat email juga merupakan masalah yang sangat umum. Menggunakan ekspresi reguler untuk melakukan verifikasi alamat email sederhana dapat diterapkan sebagai berikut:
<%
Redupkan kembali
Setel re = RegExp baru
re.pattern = "^w+@[a-zA-Z_]+?.[a-zA-Z]{2,3}$"
Respon.Tulis ulang.Test(" [email protected] ")
%>
2. Ekstrak bagian tertentu dari halaman HTML
Masalah utama yang dihadapi dalam mengekstrak konten dari halaman HTML adalah kita harus menemukan cara untuk mengidentifikasi secara akurat bagian konten yang kita inginkan. Misalnya, berikut cuplikan kode HTML yang menampilkan judul berita:
<table border="0" width="11%" class="Somestory">
<tr>
<td lebar="100%">
<p align="center">Konten lainnya...</td>
</tr>
</meja>
<tabel border="0" width="11%" class="Judul">
<tr>
<td lebar="100%">
<p align="center">Perang di Irak! </td>
</tr>
</meja>
<tabel border="0" width="11%" class="Someotherstory">
<tr>
<td lebar="100%">
<p align="center">Konten lainnya...</td>
</tr>
</tabel>
Melihat kode di atas, mudah untuk melihat bahwa judul berita ditampilkan oleh tabel di tengah, dan atribut kelasnya disetel ke Judul. Jika halaman HTML sangat kompleks, Anda dapat menggunakan fitur tambahan yang disediakan oleh Microsoft IE mulai dari 5.0 untuk hanya melihat kode HTML dari bagian halaman yang dipilih. Silakan kunjungi http://www.microsoft.com/Windows/ie /WebAccess/default.ASP Pelajari lebih lanjut. Untuk contoh ini, kita berasumsi bahwa ini adalah satu-satunya tabel yang atribut kelasnya disetel ke Judul. Sekarang kita perlu membuat ekspresi reguler, temukan tabel Judul ini melalui ekspresi reguler dan sertakan tabel ini ke halaman kita sendiri. Yang pertama adalah menulis kode yang mendukung ekspresi reguler:
<%
Redupkan kembali, strHTML
Set re = new RegExp ' Buat objek ekspresi reguler
re.IgnoreCase = true
re.Global = false 'Akhiri pencarian setelah kecocokan pertama
%>
Sekarang perhatikan area yang ingin kita ekstrak: di sini, yang ingin kita ekstrak adalah keseluruhan struktur <table>, termasuk tag penutup dan teks judul berita. Oleh karena itu, karakter awal pencarian harus berupa tag awal <table>: re.Pattern = "<table.*(?=Headline)". Ekspresi reguler ini cocok dengan tag awal tabel dan dapat mengembalikan semua yang ada di antara tag awal dan "Judul" (kecuali baris baru). Berikut cara mengembalikan kode HTML yang cocok:
'Masukkan semua kode HTML yang cocok ke dalam koleksi Matches
Set Matches = re.Execute(strHTML)
'Tampilkan semua kode HTML yang cocok
Untuk Setiap Item dalam Pertandingan
Respon.Tulis Item.Nilai
Berikutnya
'Tunjukkan salah satu dari
Response.write Matches.Item(0).Value
menjalankan kode ini untuk memproses fragmen HTML yang ditampilkan sebelumnya. Ekspresi reguler mengembalikan konten kecocokan sebagai berikut: <table border="0" width="11%" class=" . Ekspresi reguler "(?=Judul)" dalam ekspresi tidak mendapatkan karakter, sehingga nilai atribut kelas tabel tidak dapat dilihat. Kode untuk mendapatkan sisa tabel juga cukup sederhana: re.Pattern = "<table.*(?=Judul) (.|n)*?</tabel>". Diantaranya: "*" setelah "(.|n)" cocok dengan 0 hingga lebih banyak karakter; ” meminimalkan rentang pencocokan “*”, yaitu mencocokkan karakter sesedikit mungkin sebelum menemukan bagian ekspresi berikutnya. </table> adalah tag akhir tabel.
Pembatas “?” ekspresi dari mengembalikan Kode untuk tabel lain. Misalnya, untuk cuplikan kode HTML yang diberikan di atas, jika Anda menghapus "?" ini, konten yang dikembalikan akan menjadi:
<table border="0" width="11%" class=" Judul">
<tr>
<td lebar="100%">
<p align="center">Perang di Irak! </td>
</tr>
</meja>
<tabel border="0" width="11%" class="Someotherstory">
<tr>
<td lebar="100%">
<p align="center">Konten lainnya...</td>
</tr>
</meja>
Konten yang dikembalikan tidak hanya berisi tag <table> pada tabel Headline, tetapi juga tabel Someotherstory.
Contoh ini mengasumsikan beberapa premis yang cukup idealis. Dalam aplikasi sebenarnya, situasinya seringkali jauh lebih rumit, terutama ketika Anda tidak memiliki pengaruh pada penulisan kode HTML sumber yang digunakan, penulisan kode ASP sangatlah sulit. Metode yang paling efektif adalah menghabiskan lebih banyak waktu menganalisis HTML di dekat konten yang akan diekstraksi, dan melakukan pengujian sesering mungkin untuk memastikan bahwa konten yang diekstrak tepat sesuai kebutuhan Anda. Selain itu, Anda harus memperhatikan dan menangani situasi di mana ekspresi reguler tidak dapat cocok dengan konten apa pun dari halaman HTML sumber. Konten dapat berubah dengan sangat cepat, jadi jangan sampai terjadi kesalahan konyol di halaman Anda hanya karena orang lain telah mengubah format konten.
3. Parsing file data teks
Ada banyak format dan tipe file data. Dokumen XML, teks terstruktur dan bahkan teks tidak terstruktur sering menjadi sumber data untuk aplikasi ASP. Contoh yang akan kita lihat di bawah adalah file teks terstruktur menggunakan qualifier. Kualifikasi (seperti tanda kutip) menunjukkan bahwa bagian-bagian dari string tidak dapat dipisahkan, meskipun string tersebut berisi pembatas yang memisahkan rekaman menjadi beberapa bidang.
Berikut ini adalah file teks terstruktur sederhana:
nama belakang, nama depan, nomor telepon, deskripsi Sun, Wukong, 312 555 5656, ASP sangat bagus, Pig, Bajie, 847 555 5656, Saya seorang produser film
File ini sangat sederhana. Baris pertama adalah judul dan dua baris berikutnya adalah catatan yang dipisahkan dengan koma. Mengurai file ini juga sangat sederhana, cukup pisahkan file menjadi beberapa baris (menurut simbol baris baru), lalu pisahkan setiap record menurut kolom. Namun, jika kita menambahkan koma pada konten bidang tertentu:
nama belakang, nama depan, nomor telepon, deskripsi Sun, Wukong, 312 555 5656, saya suka ASP, VB dan SQL
Pig, Bajie, 847 555 5656, Saya seorang produser film.
Akan ada masalah saat mengurai rekaman pertama, karena dalam tampilan parser yang hanya mengenali pembatas koma, kolom terakhirnya berisi konten dua kolom. Untuk menghindari masalah seperti ini, kolom yang berisi pembatas harus diapit oleh qualifier. Kutipan tunggal adalah kualifikasi yang umum digunakan. Setelah menambahkan kualifikasi kutipan tunggal ke file teks di atas, isinya adalah sebagai berikut:
nama belakang, nama depan, nomor telepon, deskripsi Sun, Wukong, 312 555 5656, 'Saya suka ASP, VB dan SQL'
Zhu, Bajie, 847 555 5656, 'Saya seorang produser film'
Sekarang kita bisa menentukan koma mana yang menjadi pembatas dan koma mana yang merupakan isi kolom, artinya kita hanya perlu menganggap koma yang muncul di dalam tanda kutip sebagai isinya. dari lapangan. Hal berikutnya yang harus kita lakukan adalah mengimplementasikan parser ekspresi reguler yang menentukan kapan harus membagi bidang berdasarkan koma dan kapan memperlakukan koma sebagai konten bidang.
Masalahnya di sini sedikit berbeda dari apa yang dihadapi kebanyakan ekspresi reguler. Biasanya kita melihat sebagian kecil teks untuk melihat apakah cocok dengan ekspresi reguler. Namun di sini, kami hanya dapat mengetahui dengan pasti apa yang ada di dalam tanda kutip setelah mempertimbangkan seluruh baris teks.
Berikut ini contoh yang menggambarkan masalahnya. Ekstrak setengah baris konten secara acak dari file teks dan dapatkan: 1, beach, black, 21, ', dog, cat, duck, ', . Dalam contoh ini, karena ada data lain di sebelah kiri "1", maka sangat sulit untuk mengurai isinya. Kami tidak tahu berapa banyak tanda kutip tunggal yang mendahului fragmen data ini, jadi kami tidak dapat menentukan karakter mana yang ada di dalam tanda kutip (teks di dalam tanda kutip tidak dapat dipisahkan selama penguraian). Jika fragmen data diawali dengan tanda kutip tunggal bilangan genap (atau tidak sama sekali), maka "', dog, cat, duck, '" adalah string yang dikutip dan tidak dapat dibagi. Jika banyaknya tanda kutip sebelumnya adalah bilangan ganjil, maka "1, pantai, hitam, 21, '" adalah akhir dari sebuah string dan tidak dapat dibagi.
Oleh karena itu, ekspresi reguler harus menganalisis seluruh baris teks dengan mempertimbangkan berapa banyak tanda kutip yang muncul untuk menentukan apakah karakter tersebut berada di dalam atau di luar pasangan tanda kutip, yaitu:,(?=([^']*'[ ^']*') *(?![^']*')). Ekspresi reguler ini pertama-tama menemukan kutipan, kemudian melanjutkan pencarian dan memastikan bahwa jumlah tanda kutip tunggal setelah koma adalah angka genap atau nol. Ekspresi reguler ini didasarkan pada penilaian berikut: jika jumlah tanda kutip tunggal setelah koma genap, maka koma berada di luar string. Tabel berikut memberikan petunjuk lebih rinci:
, mencari koma
(?= terus mencari untuk mencocokkan pola ini:
(Mulai pola baru
[^']*' [karakter non-kutipan] 0 atau lebih, diikuti dengan kutipan
[^']*'[^']*) [karakter bukan tanda kutip] 0 atau lebih, diikuti dengan tanda kutip. Dikombinasikan dengan konten sebelumnya cocok dengan pasangan kutipan
)* mengakhiri pola dan mencocokkan seluruh pola (pasangan tanda kutip) sebanyak 0 kali atau lebih
(?! Telusuri ke depan, kecualikan pola ini
[^']*' [karakter non-kutipan] 0 atau lebih, diikuti dengan kutipan
) Di bawah mode akhir
terdapat fungsi VBScript, yang menerima parameter string, membagi string menurut pemisah koma dan kualifikasi kutipan tunggal dalam string, dan mengembalikan larik hasil:
Function SplitAdv(strInput)
Redupkan objek
Setel objRE = new RegExp
'Setel objek RegExp
objRE.IgnoreCase = benar
objRE.Global = benar
objRE.Pattern = ",(?=([^']*'[^']*')*(?![^']*'))"
' Metode Ganti menggunakan chr(8) untuk mengganti apa yang kita inginkan untuk menggunakan Koma, chr(8) adalahb
' karakter, b mungkin sangat jarang muncul dalam sebuah string.
' Kemudian kami membagi string menurut b dan menyimpannya ke array
SplitAdv = Split(objRE.Replace(strInput, "b"), "b")
Fungsi Akhir
Singkatnya, menggunakan ekspresi reguler untuk mengurai file data teks memiliki keuntungan berupa efisiensi tinggi dan mempersingkat waktu pengembangan. Dapat menghemat banyak waktu dalam menganalisis file dan mengekstraksi data berguna berdasarkan kondisi kompleks. Dalam lingkungan yang berkembang pesat di mana masih banyak data tradisional yang tersedia, mengetahui cara menyusun rutinitas analisis data yang efisien akan menjadi keterampilan yang berharga.
4. Penggantian string
Pada contoh terakhir, kita akan melihat fungsi penggantian ekspresi reguler VBScript. ASP sering digunakan untuk memformat teks secara dinamis yang diperoleh dari berbagai sumber data. Memanfaatkan kekuatan ekspresi reguler VBScript, ASP secara dinamis dapat mengubah pencocokan teks kompleks. Menyorot beberapa kata dengan menambahkan tag HTML adalah penerapan yang umum, seperti menyorot kata kunci pencarian di hasil pencarian.
Untuk mengilustrasikan bagaimana hal ini dilakukan, mari kita lihat contoh yang menyorot semua ".NET" dalam sebuah string. String ini dapat diperoleh dari mana saja, misalnya database atau situs Web lainnya.
<%
Setel regEx = RegExp Baru
regEx.Global = benar
regEx.IgnoreCase = Benar
'pola ekspresi reguler,
'Cari kata atau URL apa pun yang diakhiri dengan ".NET".
regEx.Pattern = "(b[a-zA-Z._]+?.NETb)"
' String yang digunakan untuk menguji fungsi penggantian
strText = "Microsoft telah membuat situs web baru www.ASP.NET ."
'Panggil metode Ganti pada ekspresi reguler
'$1 berarti menyisipkan teks yang cocok ke posisi saat ini
Respon.Tulis regEx.Replace(strText, _
"<b style='warna: #000099; ukuran font: 18pt'>$1</b>")
%>
Ada beberapa poin penting yang harus diperhatikan dalam contoh ini. Seluruh ekspresi reguler dimasukkan ke dalam sepasang tanda kurung, dan fungsinya adalah untuk mencegat semua konten yang cocok untuk digunakan nanti, yang direferensikan oleh $1 dalam teks pengganti. Hingga 9 intersepsi serupa dapat digunakan per substitusi, masing-masing direferensikan dengan $1 hingga $9. Metode Ganti pada ekspresi reguler berbeda dengan fungsi Ganti di VBScript itu sendiri. Metode ini hanya memerlukan dua parameter: teks yang akan dicari dan teks yang akan diganti.
Dalam contoh ini, untuk menyorot string ".NET" yang dicari, kami mengapitnya dengan tag tebal dan atribut gaya lainnya. Dengan menggunakan teknologi pencarian dan penggantian ini, kita dapat dengan mudah menambahkan fungsi penyorotan kata kunci pencarian ke program pencarian website, atau secara otomatis menambahkan link ke halaman lain untuk kata kunci yang muncul di halaman tersebut.
Kesimpulan
Saya harap beberapa teknik ekspresi reguler yang diperkenalkan dalam artikel ini dapat menginspirasi Anda kapan dan bagaimana menerapkan ekspresi reguler. Meskipun contoh dalam artikel ini ditulis dalam VBScript, ekspresi reguler juga berguna di ASP.NET. Ini adalah salah satu mekanisme utama untuk validasi formulir kontrol sisi server, dan diekspor ke seluruh namespace .Text.RegularExpressions melalui Sistem. Ruang nama .Text.RegularExpressions.