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.
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").
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
Trova ogni numero NON seguito da ' euro' (quindi escludendo i prezzi in euro).
Mostra suggerimento
Usa (?! ...) per dire 'NON deve seguire'. La sequenza ` euro` non deve apparire dopo.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Trova ogni parola di almeno 3 lettere che NON sia 'the' (case-insensitive).
Mostra suggerimento
Subito dopo \\b apri un lookahead negativo (?!the\\b) che esclude solo la parola the.
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
Trova tutte le parole composte da lettere che non contengono la lettera `x` in nessuna posizione (es. matcha `test`, `game` ma non `extra`, `box`).
Mostra suggerimento
Usa un lookahead negativo (?!\w*x) subito dopo il confine di parola \b.
Soluzione disponibile dopo 3 tentativi