Lookbehind-Assertionen variabler Länge, wie z. B. /(?<!foo.*)bar/, erlauben Sie können ein Muster abgleichen, wenn eine bestimmte Bedingung für eine variable Anzahl von Zeichen vor dem Muster erfüllt ist. Während einige Implementierungen regulärer Ausdrücke, wie etwa das Regex-Modul in Python, Lookbehind-Assertionen variabler Länge unterstützen, gibt es Alternativen, die in anderen Implementierungen verwendet werden können.
Eins Eine Alternative zu Lookbehind-Behauptungen variabler Länge ist das K-Zeichen. K markiert einen Punkt im regulären Ausdruck, an dem nachfolgende Übereinstimmungen nicht als Teil der endgültig erfassten Zeichenfolge betrachtet werden sollten. Zum Beispiel der folgende reguläre Ausdruck:
s/unchanged-part\Kchanged-part/new-part/x
Würde mit der Teilzeichenfolge „changed-part“ in der Zeichenfolge „unchanged-partchanged-part“ übereinstimmen und diese durch „new-part“ ersetzen. Der „unveränderte Teil“-Teil der Zeichenfolge würde jedoch nicht in die Ersetzung einbezogen.
Während K verwendet werden kann, um Lookbehind-Behauptungen variabler Länge anzunähern passend, es ist nicht so flexibel. Beispielsweise gibt es kein Äquivalent zu einer negativen Lookbehind-Behauptung mit K.
Eine negative Lookbehind-Behauptung stimmt mit einem Muster überein, wenn eine bestimmte Bedingung für eine variable Anzahl von Zeichen vor dem Muster nicht erfüllt ist. Der folgende reguläre Ausdruck verwendet eine negative Lookbehind-Behauptung, um nur dann mit der Zeichenfolge „bar“ übereinzustimmen, wenn ihr kein „foo“ vorangestellt ist:
/(?<!foo.*)bar/
Eine Näherung dieses Ausdrucks ohne Verwendung von Lookbehind-Behauptungen variabler Länge kann sein geschrieben als:
s/^(?:(?!foo).)*\Kbar/moo/s;
Während die Standardimplementierungen regulärer Ausdrücke in Perl, Ruby, JavaScript und PHP keine Lookbehind-Assertionen variabler Länge unterstützen, gibt es erweiterte reguläre Ausdrücke Ausdrucksimplementierungen, die für jede dieser Sprachen verfügbar sind:
Diese erweiterten Implementierungen regulärer Ausdrücke bieten zusätzliche Funktionen und Optimierungen, einschließlich Unterstützung für Lookbehind-Assertionen variabler Länge.
Das obige ist der detaillierte Inhalt vonWie kann ich die Funktionalität von Lookbehind-Assertionen variabler Länge in regulären Ausdrücken ohne diese erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!