Apa perbedaan antara:
(.+?)
dan
(.*?)
kapan saya menggunakannya di php preg_matchregex saya ?
Apa perbedaan antara:
(.+?)
dan
(.*?)
kapan saya menggunakannya di php preg_matchregex saya ?
Jawaban:
Mereka disebut bilangan.
* 0 atau lebih dari ekspresi sebelumnya
+ 1 atau lebih dari ekspresi sebelumnya
Secara default, pembilang adalah serakah, yang berarti itu cocok dengan karakter sebanyak mungkin.
Itu ? setelah quantifier sebuah perubahan perilaku untuk membuat quantifier ini "ungreedy", berarti itu akan cocok sesedikit mungkin.
Contoh serakah / ungreedy
Misalnya pada string " abab "
a.*b akan cocok dengan "abab" (preg_match_all akan mengembalikan satu kecocokan, "abab")
sementara a.*?bhanya akan cocok dengan "ab" awal (preg_match_all akan mengembalikan dua pertandingan, "ab")
Anda dapat menguji regex Anda secara online misalnya di Regexr, lihat contoh serakah di sini
(.+?)dan (.*?)berperilaku berbeda dalam berbagai posisi ekspresi reguler yang a(.+?), (.+?)b, a(.+?)b, a(.*?), (.*?)b, a(.*?)b.
.*akan cocok sebanyak mungkin. Jika Anda ingin berhenti sedini mungkin, maka Anda harus membuatnya tidak .*?
A +cocok dengan satu atau lebih contoh dari pola sebelumnya. A *cocok dengan nol atau lebih contoh dari pola sebelumnya.
Jadi pada dasarnya, jika Anda menggunakan +harus ada setidaknya satu contoh pola, jika Anda menggunakannya *akan tetap cocok jika tidak ada contoh pola itu.
+ cocok dengan setidaknya satu karakter
* cocok dengan sembarang angka (termasuk 0) karakter
The ?menunjukkan ekspresi malas, sehingga akan cocok sebagai beberapa karakter mungkin.
Pertimbangkan di bawah ini adalah string yang cocok.
ab
Pola (ab.*) akan mengembalikan kecocokan untuk kelompok tangkap dengan hasilab
Sedangkan polanya (ab.+)tidak akan cocok dan tidak mengembalikan apapun.
Tetapi jika Anda mengubah string menjadi mengikuti, itu akan mengembalikan abapola(ab.+)
aba
Dalam RegEx, {i,f}artinya "antara iuntuk fmencocokkan". Mari kita lihat contoh berikut ini:
{3,7} berarti antara 3 hingga 7 pertandingan {,10} Berarti hingga 10 pertandingan tanpa batas bawah (yaitu batas bawah adalah 0){3,} Berarti setidaknya 3 pertandingan tanpa batas atas (yaitu batas tertinggi adalah tak terbatas){,} berarti tidak ada batas atas atau batas bawah untuk jumlah pertandingan (yaitu batas bawah adalah 0 dan batas atas adalah tak terhingga){5} artinya tepat 4 Sebagian besar bahasa yang bagus berisi singkatan, begitu pula RegEx:
+ adalah singkatan dari {1,}* adalah singkatan dari {,}? adalah singkatan dari {,1}Ini berarti +membutuhkan setidaknya 1 pertandingan saat *menerima sejumlah pertandingan atau tidak ada pertandingan sama sekali dan? menerima tidak lebih dari 1 pertandingan atau nol pertandingan.
Kredit: Codecademy.com
Bintang sangat mirip dengan plus, satu-satunya perbedaan adalah bahwa meskipun plus cocok dengan 1 atau lebih karakter / grup sebelumnya, bintang tersebut cocok dengan 0 atau lebih.
Saya pikir jawaban sebelumnya gagal menyoroti contoh sederhana:
misalnya kami memiliki array:
numbers = [5, 15]
Ekspresi regex berikut ^[0-9]+cocok: 15hanya. Namun, ^[0-9]*cocokkan keduanya 5 and 15. Perbedaannya adalah +operator memerlukan setidaknya satu duplikat dari ekspresi regex sebelumnya