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.
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łowemthe.(?!\s)-- bieżąca pozycja NIE jest białym znakiem (przydatne jako "trim").
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
Znajdź każdą liczbę, po której NIE następuje ' euro' (wykluczając w ten sposób ceny w euro).
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
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).
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
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`).
Pokaż wskazówkę
Użyj negatywnego lookahead (?!\w*x) zaraz po granicy słowa \b.
Rozwiązanie dostępne po 3 próbach