Przejdź do głównej treści
eLearner.app
Moduł 6 · Lekcja 2 z 422/32 w kursie~10 min
Lekcje modułu (2/4)

Ujemne lookahead: `(?!...)`

Negatywne lookahead (?!...) to mroczna siostra pozytywnego lookahead: wymaga, aby określony wzorzec NIE występował po bieżącej pozycji. Nadal jest to asercja o zerowej szerokości: żaden znak nie jest konsumowany.

Code
Pattern: \d+(?! euro)
Sample:  Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
                                          ^^

Tylko 75 pasuje, ponieważ jest to jedyna sekwencja cyfr, po której NIE następuje euro. Cyfry 100 i 25 mają po sobie euro i są wykluczone.

Typowe wzorce z negatywnym lookahead

  • ^(?!.*errore).*$ -- linia, która NIE zawiera słowa "errore".
  • \b(?!the\b)\w+\b -- słowo, które nie jest słowem the.
  • (?!\s) -- bieżąca pozycja NIE jest białym znakiem (przydatne jako "trim").
Code
Pattern: ^(?!.*\.bak$).*$
Sample (wieloliniowy z flagą m):
  foto.jpg
  backup.bak
  documento.txt
Match: foto.jpg, documento.txt (wyklucza backup.bak)

Zaawansowane wykluczenia za pomocą negatywnego lookahead

Negatywne lookahead (?!...) jest niezbędne do wdrażania logiki wykluczania (np. sprawdzania, czy hasło nie zawiera słów słownikowych lub czy identyfikator nie jest słowem zastrzeżonym, takim jak class lub function).

Spróbuj sam

Ćwiczenie#regex.m6.l2.e1
Próby: 0Ładowanie...

Znajdź każdą liczbę, po której NIE następuje ' euro' (wykluczając w ten sposób ceny w euro).

Ładowanie edytora...
Pokaż wskazówkę

Użyj (?! ...), aby wskazać, że coś 'NIE może następować'. Sekwencja ` euro` nie może pojawić się po liczbie.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#regex.m6.l2.e2
Próby: 0Ładowanie...

Znajdź każde słowo składające się z co najmniej 3 liter, które NIE jest słowem 'the' (wielkość liter nie ma znaczenia).

Ładowanie edytora...
Pokaż wskazówkę

Zaraz po \b otwórz negatywne lookahead (?!the\b), które wyklucza tylko słowo the.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#regex.m6.l2.e3
Próby: 0Ładowanie...

Znajdź wszystkie słowa składające się z liter, które nie zawierają litery `x` na żadnej pozycji (np. dopasuj `test`, `game`, ale nie `extra`, `box`).

Ładowanie edytora...
Pokaż wskazówkę

Użyj negatywnego lookahead (?!\w*x) zaraz po granicy słowa \b.

Rozwiązanie dostępne po 3 próbach