Suche…


Syntax

  • Positiver Lookahead: (?=pattern)
  • Negativer Lookahead: (?!pattern)
  • Positives Aussehen : (?<=pattern)
  • Negatives Aussehen : (?<!pattern)

Bemerkungen

Wird nicht von allen Regex-Engines unterstützt.

Darüber hinaus beschränken viele Regex-Engines die Muster in Lookhinds auf Saiten mit fester Länge. Zum Beispiel sollte das Muster (?<=a+)b mit dem b in aaab , wirft jedoch einen Fehler in Python.

Erfassungsgruppen sind erlaubt und funktionieren wie erwartet, einschließlich Rückreferenzen. Das Lookahead / Lookbehind selbst ist jedoch keine Fanggruppe.

Grundlagen

Ein positiver Lookahead (?=123) , dass dem Text das angegebene Muster folgt, ohne dass das Muster in die Übereinstimmung einbezogen wird. In ähnlicher Weise behauptet ein positiver Look hinter (?<=123) , dass dem Text das angegebene Muster vorangeht. Ersetzen des = durch ! negiert die Behauptung.


Eingabe : 123456

  • 123(?=456) entspricht 123 ( positiver Lookahead )
  • (?<=123)456 Treffer 456 ( positiver Blick hinter )
  • 123(?!456) schlägt fehl ( negativer Lookahead )
  • (?<!123)456 schlägt fehl ( negativer Lookbehind )

Eingabe : 456

  • 123(?=456) schlägt fehl
  • (?<=123)456 schlägt fehl
  • 123(?!456) schlägt fehl
  • (?<!123)456 entspricht 456

Verwenden von lookbehind zum Testen von Endungen

Ein Lookbehind kann am Ende eines Musters verwendet werden, um sicherzustellen, dass es endet oder nicht in einer bestimmten Weise.

([az ]+|[AZ ]+)(?<! ) entspricht Sequenzen von nur Kleinbuchstaben oder nur Großbuchstaben, wobei nachfolgende Leerzeichen ausgeschlossen werden.

Simulieren von LookLang mit variabler Länge mit \ K

Einige reguläre Ausdrücke (Perl, PCRE, Oniguruma, Boost) unterstützen nur Lookbehinds mit fester Länge, bieten jedoch die Funktion \K , mit der der Lookbehind mit variabler Länge zu Beginn eines Musters simuliert werden kann. Nach einer Begegnung mit \K , der angepasste Text bis zu diesem Punkt wird verworfen, und nur der Text den Teil des Musters folgenden passenden \K wird im Endergebnis gehalten.

ab+\Kc

Ist äquivalent zu:

(?<=ab+)c

Im Allgemeinen ein Muster der Form:

(subpattern A)\K(subpattern B)

Am Ende ähnlich sein:

(?<=subpattern A)(subpattern B)

Außer, wenn das B-Untermuster mit demselben Text wie das A-Untermuster übereinstimmen kann, kann dies zu geringfügig unterschiedlichen Ergebnissen führen, da das A-Untermuster den Text im Gegensatz zu einem echten Lookbehind immer noch verbraucht.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow