Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ubah-Ubah Pandang Di Sebalik Penegasan: Masa Depan Ungkapan Biasa?

Ubah-Ubah Pandang Di Sebalik Penegasan: Masa Depan Ungkapan Biasa?

Linda Hamilton
Linda Hamiltonasal
2024-10-28 09:11:29452semak imbas

 Variable-Length Lookbehind Assertions: The Future of Regular Expressions?

Ungkapan Pandang Belakang Pembolehubah dalam Ungkapan Biasa

Ungkapan biasa memberikan keupayaan padanan corak yang kuat, tetapi pelaksanaan penegasan pandangan belakang panjang berubah telah sudah lama menjadi topik perdebatan.

Pelaksanaan dengan Penegasan Look Behind

Pada masa ini, penegasan lookback panjang pembolehubah disokong oleh modul regex dalam Python. Sintaksnya ialah (?

<code class="python">>>> import regex
>>> m = regex.search('(?<!foo.*)bar', 'f00bar')
>>> print(m.group())
bar
>>> m = regex.search('(?<!foo.*)bar', 'foobar')
>>> print(m)
None</p>
<p><strong>Alternatif Tanpa Penegasan Pandang di Sebalik</strong></p>
<p>Jika tiada penegasan lihat di belakang, terdapat dua alternatif:</p>
<ul>
<li>
<p><strong>K (Keep):</strong> Simbol ini menandakan satu titik dalam corak sebelum yang sebarang aksara yang dipadankan dibuang sebelum penggantian atau pengumpulan.</p>
<pre class="brush:php;toolbar:false">s/(?<=foo.*)bar/moo/s;

Menjadi:

s/foo.*\Kbar/moo/s;
  • Pandangan Negatif: Teknik ini menggunakan negatif lihat ke hadapan untuk menyemak ketiadaan "foo".

    s/(?<!foo.*)bar/moo/s;

    Menjadi:

    s/^(?:(?!foo).)*\Kbar/moo/s;
  • Pelaksanaan Masa Depan

    Ketiadaan pandangan panjang berubah-ubah di belakang pernyataan dalam bahasa arus perdana seperti Perl dan JavaScript telah menimbulkan persoalan tentang pelaksanaan masa hadapan. Ada kemungkinan bahawa suatu hari nanti bahasa-bahasa ini akan menerima pakai modul ungkapan biasa yang dipertingkatkan serupa dengan regex Python.

    Keterbatasan Alternatif

    • K tidak sefleksibel seperti lihat di belakang penegasan dan tidak boleh menentukan titik akhir aksara yang dibuang.
    • Pandangan negatif boleh menjadi lebih kompleks dan mungkin tidak disokong oleh semua enjin ekspresi biasa.

    Soalan Tambahan

    • Adakah mungkin untuk menentukan titik akhir untuk kesan K?
    • Adakah terdapat perlaksanaan ungkapan biasa yang dipertingkatkan untuk Perl, Ruby, JavaScript dan PHP serupa dengan regex Python?

    Atas ialah kandungan terperinci Ubah-Ubah Pandang Di Sebalik Penegasan: Masa Depan Ungkapan Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn