Ich habe diese Dinge in meinem Regex-Körper gefunden, aber ich habe keine Ahnung, wofür ich sie verwenden kann. Hat jemand Beispiele, damit ich versuchen kann zu verstehen, wie sie funktionieren?
(?!) - negative lookahead
(?=) - positive lookahead
(?<=) - positive lookbehind
(?<!) - negative lookbehind
(?>) - atomic group
regex
lookaround
Spidfire
quelle
quelle
Antworten:
Beispiele
Angesichts der Zeichenfolge
foobarbarfoo
:Sie können sie auch kombinieren:
Definitionen
Schauen Sie positiv nach vorne
(?=)
Finden Sie Ausdruck A, wobei Ausdruck B folgt:
Schau voraus negativ
(?!)
Suchen Sie Ausdruck A, wobei Ausdruck B nicht folgt:
Schau hinter positiv
(?<=)
Suchen Sie Ausdruck A, wobei Ausdruck B vorangestellt ist:
Schau hinter das Negative
(?<!)
Suchen Sie Ausdruck A, wobei Ausdruck B nicht vorangestellt ist:
Atomgruppen
(?>)
Eine Atomgruppe verlässt eine Gruppe und wirft alternative Muster nach dem ersten übereinstimmenden Muster innerhalb der Gruppe weg (Backtracking ist deaktiviert).
(?>foo|foot)s
angewendet auf entsprichtfoots
der ersten Alternativefoo
,s
schlägt dann fehl, da dies nicht unmittelbar folgt, und stoppt, wenn das Zurückverfolgen deaktiviert istEine nichtatomare Gruppe ermöglicht das Zurückverfolgen. Wenn der nachfolgende Abgleich fehlschlägt, werden alternative Muster zurückverfolgt und verwendet, bis eine Übereinstimmung für den gesamten Ausdruck gefunden wird oder alle Möglichkeiten ausgeschöpft sind.
(foo|foot)s
angewendet auffoots
Willen:foo
, schlagen Sie dann fehl, das
dies nicht unmittelbar folgtfoots
, und kehren Sie zur zweiten Alternative zurück.foot
, dann erfolgreich wies
sofort folgtfoots
, und stoppen.Einige Ressourcen
Online-Tester
quelle
Lookarounds sind Zusicherungen mit einer Breite von Null. Sie suchen nach einem regulären Ausdruck (rechts oder links von der aktuellen Position - basierend auf vorne oder hinten), sind erfolgreich oder scheitern, wenn eine Übereinstimmung gefunden wird (basierend darauf, ob sie positiv oder negativ ist) und verwerfen den übereinstimmenden Teil. Sie verbrauchen kein Zeichen - die Übereinstimmung mit dem ihnen folgenden regulären Ausdruck (falls vorhanden) beginnt an derselben Cursorposition.
Lesen Sie regelmäßig-expression.info für weitere Details.
Syntax:
Nur übereinstimmen, wenn REGEX_1 übereinstimmt; Nach dem Abgleich von REGEX_1 wird der Abgleich verworfen und die Suche nach REGEX_2 beginnt an derselben Position.
Beispiel:
REGEX_1
[a-z0-9]{4}$
entspricht vier alphanumerischen Zeichen, gefolgt vom Zeilenende.REGEX_2
[a-z]{1,2}[0-9]{2,3}
entspricht einem oder zwei Buchstaben, gefolgt von zwei oder drei Ziffern.REGEX_1 stellt sicher, dass die Länge der Zeichenfolge zwar 4 beträgt, verbraucht jedoch keine Zeichen, sodass die Suche nach REGEX_2 an derselben Stelle beginnt. Jetzt stellt REGEX_2 sicher, dass die Zeichenfolge mit einigen anderen Regeln übereinstimmt. Ohne Vorausschau würde es zu Saiten mit einer Länge von drei oder fünf passen.
Syntax:
Nur übereinstimmen, wenn REGEX_1 nicht übereinstimmt. Nach Überprüfung von REGEX_1 beginnt die Suche nach REGEX_2 an derselben Position.
Beispiel:
Der Look-Ahead-Teil sucht nach dem
FWORD
in der Zeichenfolge und schlägt fehl, wenn er es findet. Wenn es nicht gefunden wirdFWORD
, ist die Vorausschau erfolgreich und der folgende Teil überprüft, ob die Länge der Zeichenfolge zwischen 10 und 30 liegt und nur Wortzeichen enthälta-zA-Z0-9_
Look-Behind ähnelt Look-Ahead: Es schaut nur hinter die aktuelle Cursorposition. Einige Regex-Varianten wie Javascript unterstützen keine Behind-Behind-Behauptungen. Und die meisten Varianten, die dies unterstützen (PHP, Python usw.), erfordern, dass dieser Look-Behind-Teil eine feste Länge hat.
quelle
(?=REGEX_1)REGEX_2
passen nur , wennREGEX_2
kommt nachREGEX_1
?Grokking Lookaround schnell.
Wie kann man Lookahead und Lookbehind unterscheiden? Nehmen Sie 2 Minuten Tour mit mir:
Annehmen
Nun fragen wir B: Wo bist du?
B hat zwei Lösungen, um den Standort zu deklarieren:
Eins, B hat A vor und hat C vor
Zwei, B ist vor (Lookahead) vor C und hinter (Lookhehind) A.
Wie wir sehen können, sind das Hin und Her in beiden Lösungen gegensätzlich.
Regex ist Lösung Zwei.
quelle