Module lessons (2/4)
Negative lookahead: `(?!...)`
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).
Show hint
Use (?! ...) to say 'must NOT follow'. The ` euro` sequence must not appear after.
Solution available after 3 attempts
Review exercise
Find every word of at least 3 letters that is NOT 'the' (case-insensitive).
Show hint
Right after \\b open a negative lookahead (?!the\\b) that excludes only the word the.
Solution available after 3 attempts
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`).
Show hint
Use a negative lookahead (?!\w*x) right after the word boundary \b.
Solution available after 3 attempts