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

Lookahead positivo: `(?=...)`

Un lookahead positivo (?=...) e' un'asserzione a larghezza zero: verifica che dopo la posizione corrente segua un certo pattern, ma non consuma quei caratteri.

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

Il lookahead (?= euro) richiede che dopo le cifre ci sia euro, ma il match include solo le cifre. 75 dollari non matcha (manca euro).

Perche' "larghezza zero"

Pensa al lookahead come a una condizione sulla posizione, non come a un pezzo del match:

  • Il match si ferma prima del lookahead.
  • La posizione "dopo il match" e' l'inizio del testo guardato dal lookahead.
  • Il prossimo tentativo di match con flag g ripartira' da li'.

Questo lo rende perfetto per estrarre valori senza il contesto: prezzi senza la valuta, parole prima di una punteggiatura, ecc.

Caratteristiche dei lookahead ed avanzamento zero

Il lookahead positivo (?=...) garantisce che il pattern specificato segua il punto corrente, ma la scansione del testo riparte dalla posizione antecedente al lookahead. Questo previene il "consumo" di parti del testo che potrebbero servire per match successivi.

Prova tu

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

Estrai SOLO le cifre dei prezzi in euro (le sequenze di numeri seguite da ' euro'). Niente valuta nel match.

Caricamento editor…
Mostra suggerimento

Sposta ' euro' dentro un lookahead (?= euro): la stringa non sara' parte del match.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

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

Trova ogni parola immediatamente seguita da due punti `:` (ma senza includere i due punti nel match).

Caricamento editor…
Mostra suggerimento

Stessa logica: il `:` non e' nel match, ma e' una condizione di posizione.

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

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

Trova ogni nome di parola (es. nome di funzione) seguito immediatamente da una parentesi tonda aperta `(`, escludendo la parentesi dal match.

Caricamento editor…
Mostra suggerimento

Sposta \( (parentesi tonda aperta escapata) all'interno del lookahead positivo (?=...).

Soluzione disponibile dopo 3 tentativi