Padanan Rentetan Bertindih dengan Ungkapan Biasa
Apabila menggunakan ungkapan biasa dengan bendera global (/g) untuk memadankan rentetan, anda boleh menghadapi kes di mana perlawanan bertindih tidak dikembalikan seperti yang diharapkan. Contohnya, dalam rentetan "12345," padanan menggunakan /d{3}/g hanya menghasilkan padanan "123" dan bukannya ["123", "234", "345"].
Sebabnya kerana tingkah laku ini terletak pada sifat pemadanan regex dengan bendera global. Enjin regex membaca dan menggunakan subrentetan yang dipadankan, memajukan indeksnya ke kedudukan serta-merta selepas perlawanan. Dalam kes ini, selepas memadankan "123," indeks bergerak ke kedudukan 4, meninggalkan hanya "45" untuk pemadanan berikutnya.
Teknik untuk Pemadanan Bertindih
Untuk mencapai perlawanan bertindih, beberapa pendekatan boleh bekerja:
Ketegasan Sifar Lebar:
Contoh (JavaScript menggunakan matchAll) :
const re = /(?=(\d{3}))/g; console.log(Array.from('12345'.matchAll(re), x => x[1]));
Kod ini menggunakan pandangan ke hadapan yang positif untuk menguji semua jawatan dalam rentetan yang sepadan dengan tiga digit berturut-turut. Hasilnya ialah tatasusunan subrentetan yang dipadankan, termasuk ["123", "234", "345"].
Pertimbangan Tambahan:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapat Padanan Bertindih dengan Ungkapan Biasa dan Bendera Global?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!