⊗ppPmRgGL 229 of 447 menu

Membatasi Keserakahan dalam Ekspresi Reguler di PHP

Ekspresi reguler secara default bersifat serakah (greedy). Ini berarti mereka akan mengambil jumlah karakter sebanyak mungkin.

Mari kita bahas dengan contoh. Misalkan kita memiliki string seperti ini:

<?php $str = 'aeeex zzz x kkk'; ?>

Misalkan kita ingin menemukan substring 'aeeex' dalam string ini dengan pola berikut: huruf 'a', diikuti oleh karakter apa pun satu kali atau lebih, lalu huruf 'x'.

<?php $res = preg_replace('#a.+x#', '!', $str); ?>

Kita berharap hasilnya adalah string '! zzz x kkk'. Namun, kenyataannya tidak - yang masuk ke variabel hasil adalah string '! kkk'.

Masalahnya adalah regex kita mencari semua karakter dari huruf 'a' hingga huruf 'x'. Tapi dalam string kita ada dua huruf 'x'. Karena sifat serakah, regex akan mencari hingga huruf 'x' yang terakhir, sehingga mengambil lebih dari yang kita harapkan.

Tentu saja, seringkali perilaku seperti inilah yang kita inginkan. Tapi khusus dalam kasus ini, kita ingin membatalkan keserakahan dan memerintahkan regex untuk mencari sampai huruf 'x' yang pertama.

Untuk membatasi keserakahan, kita perlu menambahkan tanda tanya setelah operator pengulangan:

<?php $res = preg_replace('#a.+?x#', '!', $str); ?>

Keserakahan dapat dibatasi untuk semua operator pengulangan, seperti ini: *?, ?? dan {}?.

Diberikan string:

<?php $str = 'aba accca azzza wwwwa'; ?>

Tuliskan ekspresi reguler yang akan menemukan semua string yang diapit oleh huruf 'a', dan mengganti setiap string tersebut dengan '!'. Di antara huruf a bisa ada karakter apa pun (kecuali 'a').

Indonesia
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan cookie untuk operasi situs, analitik, dan personalisasi. Pemrosesan data dilakukan sesuai dengan Kebijakan Privasi.
terima semua atur tolak