Уроки модуля (2/4)
Отрицательный прогноз: `(?!...)`
The negative lookahead (?!...) is the dark sister of the positive lookahead:
it requires that the given pattern NOT follow the current position. It is
still zero-width: no character is consumed.
Pattern: \d+(?! euro)
Sample: Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
^^Only 75 matches, because it is the only sequence of digits NOT followed by
euro. The digits 100 and 25 are followed by euro and are
excluded.
Typical negative lookahead patterns
^(?!.*errore).*$-- a line that does NOT contain the word "errore".\b(?!the\b)\w+\b-- a word that is notthe.(?!\s)-- the current position is NOT a whitespace (useful as a "trim").
Pattern: ^(?!.*\.bak$).*$
Sample (multiline with flag m):
foto.jpg
backup.bak
documento.txt
Match: foto.jpg, documento.txt (excludes backup.bak)Advanced exclusions via negative lookahead
The negative lookahead (?!...) is essential for implementing exclusion logic (like verifying that a password does not contain dictionary words or that an identifier is not a reserved keyword like class or function).
Try it
Find every number NOT followed by ' euro' (so excluding the euro prices).
Показать подсказку
Use (?! ...) to say 'must NOT follow'. The ` euro` sequence must not appear after.
Решение доступно после 3 попыток
Review exercise
Find every word of at least 3 letters that is NOT 'the' (case-insensitive).
Показать подсказку
Right after \\b open a negative lookahead (?!the\\b) that excludes only the word the.
Решение доступно после 3 попыток
Additional challenge
Find all words consisting of letters that do not contain the letter `x` at any position (e.g. match `test`, `game` but not `extra`, `box`).
Показать подсказку
Use a negative lookahead (?!\w*x) right after the word boundary \b.
Решение доступно после 3 попыток