Direct naar de hoofdinhoud
Module 6 · Les 2 van 422/32 in de cursus~10 min
Modulelessen (2/4)

Negatieve vooruitblik: `(?!...)`

De negatieve vooruitkijk (?!...) is het donkere zusje van de positieve vooruitblik: het vereist dat het gegeven patroon NIET de huidige positie volgt. Het is nog steeds zero-width: er wordt geen karakter verbruikt.

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

Alleen 75 komt overeen, omdat dit de enige reeks cijfers is die NIET wordt gevolgd door BESCHERMD_INLINE_2. De cijfers 100 en 25 worden gevolgd door euro en zijn uitgesloten.

Typische negatieve vooruitkijkpatronen

  • ^(?!.*errore).*$ -- een regel die NIET het woord "fout" bevat.
  • \b(?!the\b)\w+\b -- een woord dat niet the is.
  • (?!\s) -- de huidige positie is GEEN witruimte (handig als "trim").
Code
Pattern: ^(?!.*\.bak$).*$
Sample (multiline with flag m):
  foto.jpg
  backup.bak
  documento.txt
Match: foto.jpg, documento.txt (excludes backup.bak)

Geavanceerde uitsluitingen via negatieve vooruitkijk

De negatieve lookahead (?!...) is essentieel voor het implementeren van uitsluitingslogica (zoals het verifiëren dat een wachtwoord geen woordenboekwoorden bevat of dat een ID geen gereserveerd trefwoord is, zoals class of function).

Probeer het

Oefening#regex.m6.l2.e1
Pogingen: 0Laden…

Zoek elk getal dat NIET gevolgd wordt door 'euro' (dus exclusief de europrijzen).

Editor laden…
Toon hint

Gebruik (?! ...) om te zeggen 'mag NIET volgen'. De reeks 'euro' mag niet daarna verschijnen.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#regex.m6.l2.e2
Pogingen: 0Laden…

Zoek elk woord van minimaal 3 letters dat NIET 'de' is (niet hoofdlettergevoelig).

Editor laden…
Toon hint

Direct na \\b opent u een negatieve lookahead (?!the\\b) die alleen het woord the uitsluit.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#regex.m6.l2.e3
Pogingen: 0Laden…

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`).

Editor laden…
Toon hint

Gebruik een negatieve lookahead (?!\\w*x) direct na de woordgrens \\b.

Oplossing beschikbaar na 3 pogingen