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) matchar 123 ( positiv lookahead )
  • (?<=123)456 matchar 456 ( positivt utseende )
  • 123(?!456) misslyckas ( negativ lookahead )
  • (?<!123)456 misslyckas ( negativt utseende )

Ingång : 456

  • 123(?=456) misslyckas
  • (?<=123)456 misslyckas
  • 123(?!456) misslyckas
  • (?<!123)456 matchningar 456

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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow