Teks bahasa Inggris asli berasal dari Smashing Magazine . Diterjemahkan oleh Benhuoer . Harap sebutkan sumbernya saat mencetak ulang.
Ekspresi reguler (Ekspresi Reguler, disingkat regex) sangat berguna dan dapat digunakan untuk menemukan informasi yang diperlukan dalam serangkaian karakter yang besar. Ia menggunakan ekspresi struktur karakter konvensional untuk bekerja. Sayangnya, ekspresi reguler sederhana tidak cukup kuat untuk beberapa aplikasi tingkat lanjut. Jika struktur pemfilteran lebih kompleks, Anda mungkin perlu menggunakan ekspresi reguler tingkat lanjut.
Artikel ini memperkenalkan Anda pada teknik ekspresi reguler tingkat lanjut. Kami telah menyaring delapan konsep yang umum digunakan dan menganalisisnya dengan contoh. Setiap contoh adalah cara penulisan sederhana untuk memenuhi persyaratan kompleks tertentu. Jika Anda masih kurang memahami konsep dasar regularisasi, silakan baca artikel ini, tutorial ini, atau entri Wiki terlebih dahulu.
Sintaks reguler di sini cocok untuk PHP dan kompatibel dengan Perl.
1. Keserakahan/Kemalasan
Semua operator reguler yang dapat dikualifikasi berkali-kali adalah serakah. Mereka mencocokkan string target sebanyak mungkin, yang berarti hasil pertandingan akan sepanjang mungkin. Sayangnya, pendekatan ini tidak selalu sesuai dengan keinginan kita. Oleh karena itu, kami menambahkan kualifikasi "malas" untuk menyelesaikan masalah tersebut. Menambahkan "?" setelah setiap operator serakah menyebabkan ekspresi hanya cocok dengan panjang sependek mungkin. Selain itu, pengubah "U" juga dapat melakukan malasisasi operator yang dapat dikualifikasi berkali-kali. Memahami perbedaan antara serakah dan malas adalah dasar untuk menggunakan ekspresi reguler tingkat lanjut.
operator serakah
Operator * cocok dengan ekspresi sebelumnya sebanyak nol kali atau lebih. Ini adalah operator yang rakus. Silakan lihat contoh berikut:
preg_match( '/<h1>.*< /h1>/', '</h1><h1>Ini adalah judulnya.</h1>
<h1>Ini satu lagi. </h1>', $cocok );
Titik (.) dapat mewakili karakter apa pun kecuali karakter baris baru. Ekspresi reguler di atas cocok dengan tag h1 dan semua yang ada di dalam tag. Ia menggunakan titik (.) dan tanda bintang (*) untuk mencocokkan semua yang ada di dalam tag. Hasil pencocokannya adalah sebagai berikut:
<h1>Ini adalah sebuah judul. </h1>
<h1>Ini satu lagi. </h1>
Seluruh string dikembalikan. Operator * akan mencocokkan semuanya secara berurutan - bahkan tag penutup h1 di tengah. Karena serakah, mencocokkan seluruh string sejalan dengan prinsip memaksimalkan kepentingan.
operator malas
Ubah sedikit rumus di atas dan tambahkan tanda tanya (?) untuk membuat ekspresi malas:
/<h1>.*?< /h1>/</h1>
Dengan cara ini, ia akan merasa hanya perlu mencocokkan tag akhir h1 pertama untuk menyelesaikan tugas.
Operator serakah lainnya dengan sifat serupa adalah {n,}. Artinya pola pencocokan sebelumnya diulang sebanyak n kali atau lebih. Jika tidak ditambahkan tanda tanya, maka akan dicari pengulangan sebanyak-banyaknya n kali" adalah minimum).
#Buat string
$str = 'hihihi ups hai';
# Gunakan operator serakah {n,} untuk pencocokan
preg_match( '/(hi){2,}/', $str, $matches ); # kecocokan[0] akan menjadi 'hihihi'
# Gunakan operator {n,} yang terdegradasi untuk mencocokkan
preg_match( '/(hi){2,}?/', $str, $matches ); # kecocokan[0] akan menjadi 'hihi'
Sumber: pekerjaan bodoh