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

Linda Hamilton
Lepaskan: 2024-10-28 09:11:29
asal
451 orang telah melayarinya

 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;
Salin selepas log masuk

Menjadi:

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

    s/(?<!foo.*)bar/moo/s;
    Salin selepas log masuk

    Menjadi:

    s/^(?:(?!foo).)*\Kbar/moo/s;
    Salin selepas log masuk
  • 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!

    sumber:php.cn
    Kenyataan Laman Web ini
    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
    Artikel terbaru oleh pengarang
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!