Heim  >  Artikel  >  Backend-Entwicklung  >  Lookbehind-Assertions variabler Länge: Die Zukunft regulärer Ausdrücke?

Lookbehind-Assertions variabler Länge: Die Zukunft regulärer Ausdrücke?

Linda Hamilton
Linda HamiltonOriginal
2024-10-28 09:11:29452Durchsuche

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

Lookbehind-Assertionen variabler Länge in regulären Ausdrücken

Reguläre Ausdrücke bieten leistungsstarke Mustervergleichsfunktionen, die Implementierung von Lookbehind-Assertionen variabler Länge jedoch schon ist schon lange ein Diskussionsthema.

Implementierungen mit Lookbehind-Assertions

Derzeit werden Lookbehind-Assertionen variabler Länge vom Regex-Modul in Python unterstützt. Die Syntax ist (?

<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>Alternativen ohne Lookbehind-Assertionen</strong></p>
<p>In Ermangelung von Lookbehind-Behauptungen gibt es zwei Alternativen:</p>
<ul>
<li>
<p><strong>K (Keep):</strong> Dieses Symbol markiert einen Punkt im Muster, vor dem Alle übereinstimmenden Zeichen werden vor der Ersetzung oder Gruppierung verworfen.</p>
<pre class="brush:php;toolbar:false">s/(?<=foo.*)bar/moo/s;

Wird:

s/foo.*\Kbar/moo/s;
  • Negative Lookahead: Diese Technik verwendet ein Negativ Lookahead, um zu prüfen, ob „foo“ fehlt.

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

    Wird:

    s/^(?:(?!foo).)*\Kbar/moo/s;
  • Zukünftige Implementierungen

    Das Fehlen von Lookbehind-Behauptungen variabler Länge in Mainstream-Sprachen wie Perl und JavaScript hat Fragen zur zukünftigen Implementierung aufgeworfen. Es ist möglich, dass diese Sprachen eines Tages ein erweitertes Modul für reguläre Ausdrücke ähnlich dem regulären Ausdruck von Python übernehmen werden.

    Einschränkungen von Alternativen

    • K ist nicht so flexibel wie Lookbehind-Behauptungen und können den Endpunkt der verworfenen Zeichen nicht angeben.
    • Negative Lookaheads können komplexer sein und werden möglicherweise nicht von allen regulären Ausdrucks-Engines unterstützt.

    Zusätzliche Fragen

    • Ist es möglich, einen Endpunkt für den K-Effekt anzugeben?
    • Gibt es erweiterte Implementierungen regulärer Ausdrücke für Perl, Ruby, JavaScript und PHP, die dem regulären Ausdruck von Python ähneln?

    Das obige ist der detaillierte Inhalt vonLookbehind-Assertions variabler Länge: Die Zukunft regulärer Ausdrücke?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn