Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah saya boleh mencapai kefungsian rupa pembolehubah panjang di belakang pernyataan dalam ungkapan biasa tanpanya?
Pandangan panjang pembolehubah di belakang penegasan, seperti /(?<!foo.*)bar/, benarkan anda untuk memadankan corak jika syarat tertentu dipenuhi untuk bilangan pembolehubah aksara yang mendahului corak. Walaupun beberapa pelaksanaan ungkapan biasa, seperti modul regex dalam Python, menyokong lihat di belakang pernyataan panjang berubah-ubah, terdapat alternatif yang boleh digunakan dalam pelaksanaan lain.
Satu alternatif kepada pemerhatian panjang berubah-ubah di belakang pernyataan ialah aksara K. K menandakan titik dalam ungkapan biasa di mana perlawanan berikutnya tidak boleh dianggap sebagai sebahagian daripada rentetan yang ditangkap terakhir. Contohnya, ungkapan biasa berikut:
s/unchanged-part\Kchanged-part/new-part/x
Akan memadankan subrentetan "bahagian berubah" dalam rentetan "bahagian yang tidak berubah" dan menggantikannya dengan "bahagian baharu". Walau bagaimanapun, bahagian "bahagian tidak berubah" rentetan tidak akan disertakan dalam penggantian.
Manakala K boleh digunakan untuk menganggarkan rupa panjang berubah-ubah di belakang pernyataan dalam padanan, ia tidak begitu fleksibel. Contohnya, tiada persamaan pandangan negatif di belakang penegasan menggunakan K.
Pandangan negatif di belakang penegasan sepadan dengan corak jika syarat tertentu tidak dipenuhi untuk bilangan pembolehubah aksara yang mendahului corak. Ungkapan biasa berikut menggunakan penegasan pandangan belakang negatif untuk memadankan rentetan "bar" hanya jika ia tidak didahului dengan "foo":
/(?<!foo.*)bar/
Penghampiran ungkapan ini tanpa menggunakan penegasan pandangan belakang panjang berubah boleh ditulis sebagai:
s/^(?:(?!foo).)*\Kbar/moo/s;
Walaupun pelaksanaan ungkapan biasa standard dalam Perl, Ruby, JavaScript dan PHP tidak menyokong rupa pembolehubah panjang di belakang pernyataan, terdapat tetapan biasa yang dipertingkatkan. pelaksanaan ungkapan tersedia untuk setiap bahasa ini:
Pelaksanaan ungkapan biasa yang dipertingkatkan ini menawarkan ciri dan pengoptimuman tambahan, termasuk sokongan untuk penegasan pandangan belakang panjang berubah.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mencapai kefungsian rupa pembolehubah panjang di belakang pernyataan dalam ungkapan biasa tanpanya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!