Menyingkap Misteri Sempadan Kata Ungkapan Biasa dalam PHP
Apabila menggunakan ungkapan biasa untuk mencari perkataan tertentu dalam teks, selalunya wajar untuk mengenakan kekangan sama ada perkataan yang ditentukan menandakan permulaan atau penutup unit perkataan. Walau bagaimanapun, beberapa tingkah laku yang tidak dijangka mungkin timbul apabila cuba melaksanakan ini menggunakan sempadan perkataan.
Pertimbangkan ungkapan biasa berikut:
preg_match("/(^|\b)@nimal/i", "something@nimal", $match);
Kami menjangkakan bahawa perlawanan akan gagal kerana ungkapan kumpulan akan menggunakan simbol "@", meninggalkan "nimal" untuk dipadankan dengan "@nimal," yang tidak sepatutnya. Walau bagaimanapun, dalam contoh ini, ungkapan pengelompokan sepadan dengan rentetan kosong, membenarkan "@nimal" dipadankan, membayangkan bahawa "@" dianggap sebagai sebahagian daripada perkataan.
Untuk membongkar misteri ini, adalah penting untuk memahami bagaimana sempadan perkataan dalam PHP ditentukan. Sempadan perkataan (b) mewakili titik peralihan antara watak perkataan (w) dan watak bukan perkataan (W). Untuk memadankan perkataan yang mesti bermula pada permulaan perkataan, aksara perkataan tambahan mesti mendahului perkataan yang dijangkakan.
Oleh itu, dalam contoh pertama:
something@nimal ^^
Pemadanan berjaya kerana ada sempadan perkataan antara huruf "g" dan simbol "@". Walau bagaimanapun, dalam contoh kedua:
something!@nimal ^^
Pemadanan gagal kerana "!" dan simbol "@" ialah kedua-dua aksara bukan perkataan, tidak mewujudkan sempadan perkataan. Untuk membetulkannya, anda boleh menggunakan ungkapan biasa berikut:
preg_match("/g\b!@\bn/i", "something!@nimal", $match);
Ungkapan ini memerlukan aksara perkataan sebelum "@" dan aksara perkataan selepas "@," memastikan ia hanya sepadan apabila "@" muncul dalam satu perkataan.
Atas ialah kandungan terperinci Bagaimanakah Sempadan Perkataan dalam PHP Mengendalikan Aksara Bukan Perkataan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!