دروس الوحدة (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 من المحاولات