Vai al contenuto
eLearner.app
Modulo 1 · Lezione 3 di 43/32 nel corso~8 min
Lezioni del modulo (3/4)

Il jolly: il punto `.`

Il punto . in regex e' il jolly: matcha qualunque carattere singolo\u2026 con una sola eccezione importante: NON matcha il newline (\n).

Code
Pattern: c.t
Sample:  cat cot cut c@t c\nt
         ^^^ ^^^ ^^^ ^^^

Tre lettere: una c, un carattere qualsiasi, una t. Niente newline in mezzo, quindi c\nt non viene matchato (di default).

Il punto e' utilissimo ma anche pericoloso: usato senza disciplina cattura piu' di quanto vorresti. Combinato con i quantificatori del modulo 2 (.*, .+?) e' la sorgente del 90% dei pattern che "non funzionano come pensavo".

Flag s: "dotAll"

Con la flag s (detta anche dotAll o single-line) il punto matcha ogni carattere, newline compreso. Utile per estrarre blocchi che attraversano piu' righe.

Code
Pattern: <p>.*</p>
Flag:    gs
Sample:  <p>prima\nseconda</p>
         ^^^^^^^^^^^^^^^^^^^^^

Limiti e comportamento del punto jolly

Il punto . è un jolly potente, ma per impostazione predefinita non matcha il carattere di a capo (\\n). Se vuoi che il punto matchi assolutamente tutto, incluso l'a capo, devi attivare la flag s (dotAll). Attenzione all'uso del punto con quantificatori (.*), poiché tende a consumare troppo testo (comportamento avido).

Prova tu

Esercizio#regex.m1.l3.e1
Tentativi: 0Caricamento…

Trova ogni triplette di caratteri delimitate da parentesi tonde, es. `(abc)`, `(xyz)`. Usa il jolly per i 3 caratteri interni.

Caricamento editor…
Mostra suggerimento

Tre punti per tre caratteri qualsiasi. Le parentesi sono meta-caratteri: vanno escapate con \\.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#regex.m1.l3.e2
Tentativi: 0Caricamento…

Estrai il blocco fra `[INIZIO]` e `[FINE]`, che puo' attraversare piu' righe. Ti servira' la flag `s` per far matchare il punto anche ai newline, e la versione 'lazy' del quantificatore (`.*?`, modulo 2).

Caricamento editor…
Mostra suggerimento

Senza flag s, il punto si ferma a fine riga: aggiungila. La forma .*? (lazy) ferma il match al primo [FINE].

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#regex.m1.l3.e3
Tentativi: 0Caricamento…

Trova tutte le sequenze di 3 caratteri che iniziano con `c` e finiscono con `t` (es. `cat`, `cot`, `c-t`).

Caricamento editor…
Mostra suggerimento

Il pattern usa il punto '.' per rappresentare il carattere centrale jolly.

Soluzione disponibile dopo 3 tentativi