Vai al contenuto
eLearner.app
Modulo 6 · Lezione 2 di 422/32 nel corso~10 min
Lezioni del modulo (2/4)

Lookahead negativo: `(?!...)`

Il lookahead negativo (?!...) e' la sorella scura del lookahead positivo: richiede che dopo la posizione corrente NON segua il pattern indicato. E' ancora a larghezza zero: nessun carattere viene consumato.

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

Solo 75 matcha, perche' e' l'unica sequenza di cifre che NON e' seguita da euro. Le cifre 100 e 25 invece sono seguite proprio da euro e vengono escluse.

Pattern tipici di lookahead negativo

  • ^(?!.*errore).*$ -- una riga che NON contiene la parola "errore".
  • \b(?!the\b)\w+\b -- una parola che non e' the.
  • (?!\s) -- la posizione corrente NON e' uno spazio (utile come "trim").
Code
Pattern: ^(?!.*\.bak$).*$
Sample (multilinea con flag m):
  foto.jpg
  backup.bak
  documento.txt
Match: foto.jpg, documento.txt (esclude backup.bak)

Esclusioni avanzate tramite lookahead negativo

Il lookahead negativo (?!...) è fondamentale per implementare logiche di esclusione (like verificare che una password non contenga parole banali o che un identificatore non sia una parola chiave riservata come class o function).

Prova tu

Esercizio#regex.m6.l2.e1
Tentativi: 0Caricamento…

Trova ogni numero NON seguito da ' euro' (quindi escludendo i prezzi in euro).

Caricamento editor…
Mostra suggerimento

Usa (?! ...) per dire 'NON deve seguire'. La sequenza ` euro` non deve apparire dopo.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#regex.m6.l2.e2
Tentativi: 0Caricamento…

Trova ogni parola di almeno 3 lettere che NON sia 'the' (case-insensitive).

Caricamento editor…
Mostra suggerimento

Subito dopo \\b apri un lookahead negativo (?!the\\b) che esclude solo la parola the.

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#regex.m6.l2.e3
Tentativi: 0Caricamento…

Trova tutte le parole composte da lettere che non contengono la lettera `x` in nessuna posizione (es. matcha `test`, `game` ma non `extra`, `box`).

Caricamento editor…
Mostra suggerimento

Usa un lookahead negativo (?!\w*x) subito dopo il confine di parola \b.

Soluzione disponibile dopo 3 tentativi