Szukaj…


Składnia

  • Pozytywne spojrzenie w przód: (?=pattern)
  • Negatywne spojrzenie w przód: (?!pattern)
  • Pozytywny wygląd : (?<=pattern)
  • Negatywny wygląd : (?<!pattern)

Uwagi

Nie obsługiwane przez wszystkie silniki regex.

Ponadto wiele silników wyrażeń regularnych ogranicza wzorce wewnątrz ciągów znaków do ciągów o stałej długości. Na przykład wzorzec (?<=a+)b powinien pasować do b w aaab ale generuje błąd w Pythonie.

Przechwytywanie grup jest dozwolone i działa zgodnie z oczekiwaniami, w tym odwołań wstecznych. Jednak sam lookahead / lookbehind nie jest grupą przechwytującą.

Podstawy

Dodatni lookahead (?=123) zapewnia, że po tekście znajduje się podany wzorzec, bez uwzględnienia wzorca w dopasowaniu. Podobnie dodatni wygląd (?<=123) potwierdza, że tekst jest poprzedzony danym wzorcem. Zamiana = ! neguje to twierdzenie.


Dane wejściowe : 123456

  • 123(?=456) dopasowania 123 ( pozytywne spojrzenie w przyszłość )
  • (?<=123)456 dopasowania 456 ( pozytywny wygląd )
  • 123(?!456) zawodzi ( negatywne spojrzenie w przyszłość )
  • (?<!123)456 nie działa ( negatywny wygląd )

Wejście : 456

  • 123(?=456) kończy się niepowodzeniem
  • (?<=123)456 kończy się niepowodzeniem
  • 123(?!456) kończy się niepowodzeniem
  • (?<!123)456 dopasowania 456

Używanie lookbehind do testowania zakończeń

Na końcu wzoru można zastosować lookbehind, aby upewnić się, że kończy się on lub nie w określony sposób.

([az ]+|[AZ ]+)(?<! ) dopasowuje ciągi tylko małych lub wielkich liter, wykluczając końcowe białe znaki.

Symulowanie wyglądu zmiennej długości za pomocą \ K

Niektóre smaki wyrażeń regularnych (Perl, PCRE, Oniguruma, Boost) obsługują tylko lookhinds o stałej długości, ale oferują funkcję \K , której można użyć do symulacji looku o zmiennej długości na początku wzoru. Po napotkaniu \K dopasowany tekst do tego momentu jest odrzucany, a tylko tekst pasujący do części wzoru następującego po \K zostaje zachowany w wyniku końcowym.

ab+\Kc

Jest równa:

(?<=ab+)c

Ogólnie wzór formularza:

(subpattern A)\K(subpattern B)

W końcu jest podobny do:

(?<=subpattern A)(subpattern B)

Z wyjątkiem sytuacji, gdy wzór B może pasować do tego samego tekstu co wzór A - możesz uzyskać subtelnie różne wyniki, ponieważ wzór A nadal zużywa tekst, w przeciwieństwie do prawdziwego wyglądu.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow