Lezioni del modulo (4/4)
Lookaround in pratica
Mettiamo insieme tutte e quattro le forme di lookaround in scenari reali. I lookaround brillano quando devi:
- Estrarre un valore senza il contesto che lo identifica.
- Validare una stringa contro condizioni multiple indipendenti.
- Filtrare match che ne soddisfano alcune ma non altre.
Validazione password
Pattern: ^(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,}$
Verifica:
- almeno una maiuscola (?=.*[A-Z])
- almeno una cifra (?=.*\d)
- almeno un simbolo (?=.*[^a-zA-Z\d])
- lunghezza minima 8 .{8,}Ogni lookahead controlla una condizione, partendo dall'inizio (^). Sono
tutti a larghezza zero: l'engine rimane in posizione 0 e poi consuma con
.{8,}$.
Estrazione tra delimitatori
Pattern: (?<=\().+?(?=\))
Sample: Funzione foo(bar) e baz(qux, qix)
Match: "bar", "quux, qix" (senza parentesi)Lookbehind + lookahead + quantificatore lazy: estrae il contenuto dentro le parentesi senza includerle.
Combinare lookahead e lookbehind
L'uso congiunto di lookahead e lookbehind permette di isolare stringhe che si trovano all'interno di precisi tag o formati (es. estrarre il testo tra due tag senza includere i tag nel match finale). Ciò evita operazioni successive di pulizia delle stringhe.
Prova tu
Estrai il valore di ogni assegnazione `chiave=valore` dal log: SOLO i valori (non chiavi, non `=`). I valori possono contenere lettere e cifre.
Mostra suggerimento
Sposta `=` dentro un lookbehind (?<==): cosi' il match contiene solo il valore.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Verifica quali parole hanno almeno UNA maiuscola E almeno UNA cifra (qualsiasi ordine), trovandole nel testo.
Mostra suggerimento
Doppio lookahead all'inizio: (?=\\w*[A-Z])(?=\\w*\\d). Poi consuma la parola con \\w+.
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
Estrai solo le cifre numeriche racchiuse esattamente tra parentesi tonde, es. estrai `102` da `(102)` senza catturare le parentesi.
Mostra suggerimento
Combina un lookbehind positivo (?<=\( ) per la parentesi aperta e un lookahead positivo (?=\) ) per quella chiusa.
Soluzione disponibile dopo 3 tentativi