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
Zusätzliche Fragen
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!