Regular Expressions
Lookahead och Lookbehind
Sök…
Syntax
- Positiv lookahead:
(?=pattern) - Negativ lookahead:
(?!pattern) - Positiv utseende :
(?<=pattern) - Negativt utseende :
(?<!pattern)
Anmärkningar
Stöds inte av alla regex-motorer.
Dessutom begränsar många regex-motorer mönstren i lookbehinds till sträng med fast längd. Till exempel ska mönstret (?<=a+)b aaab (?<=a+)b matcha b i aaab men kastar ett fel i Python.
Att fånga grupper är tillåtna och fungera som förväntat, inklusive backreferenser. Lookahead / lookbehind själv är dock inte en fångargrupp.
Grunderna
En positiv lookahead (?=123) hävdar att texten följs av det givna mönstret utan att inkludera mönstret i matchen. På liknande sätt hävdar en positiv lookbehind (?<=123) att texten föregås av det givna mönstret. Ersätta = med ! förnekar påståendet.
Ingång : 123456
-
123(?=456)matchar123( positiv lookahead ) -
(?<=123)456matchar456( positivt utseende ) -
123(?!456)misslyckas ( negativ lookahead ) -
(?<!123)456misslyckas ( negativt utseende )
Ingång : 456
-
123(?=456)misslyckas -
(?<=123)456misslyckas -
123(?!456)misslyckas -
(?<!123)456matchningar456
Använd lookbehind för att testa avslut
En lookbehind kan användas i slutet av ett mönster för att säkerställa att det slutar eller inte på ett visst sätt.
([az ]+|[AZ ]+)(?<! ) matchar sekvenser med endast gemener eller endast versaler med undantag för efterföljande mellanrum.
Simulera utseende med variabel längd med \ K
Vissa regex-smaker (Perl, PCRE, Oniguruma, Boost) stöder endast utseende med fast längd, men erbjuder funktionen \K , som kan användas för att simulera utseende med variabel längd i början av ett mönster. När man möter a \K , kasseras den matchade texten fram till denna punkt, och endast den text som matchar den del av mönstret som följer \K förvaras i slutresultatet.
ab+\Kc
Är ekvivalent med:
(?<=ab+)c
I allmänhet ett mönster av formen:
(subpattern A)\K(subpattern B)
Slutar med att likna:
(?<=subpattern A)(subpattern B)
Förutom när B-mönstret kan matcha samma text som A-mönstret - du kan sluta med subtilt olika resultat, eftersom A-mönstret fortfarande konsumerar texten, till skillnad från ett riktigt utseende.