Eccoci alla seconda puntata della mini serie sulle espressioni regolari. Nello scorso articolo abbiamo visto cosa sono le espressioni regolari e a cosa servono.
Questa volta andremo più nello specifico sulla sintassi delle espressioni regolari e inizieremo a vedere alcuni operatori e la loro funzione.
Quantificatori
I quantificatori definiscono il numero di occorrenze di un carattere o un set di caratteri. Iniziamo con una lista di quantificatori e poi vediamo qualche esempio pratico di come si usano.
a|b – Accetta “a” oppure “b
? – Zero o una occorrenza
+ – Una o più occorrenze
* – Zero o più occorrenze
{N} – Esattamente N occorrenze (dove N è un numero)
{N,} – N o più occorrenze (dove N è un numero)
{N,M} – Tra N e M occorrenze (dove N e M sono numeri e N<M)
*? – Zero o più occorrenze, ma fermati al primo match
Per esempio la seguente espressione regolare
mela|pera
restituisce un match con “mela” o “pera”.
Invece una regex come
ciao{1,2}
restituirà un match con “ciao” e “ciaoo”, ma non con “ciaooo” perché il quantificatore indica un minimo di 1 e un massimo di 2 occorrenze di “o”. https://regex101.com/r/lczwEw/1
Quantificatori in modalità greedy e lazy
Uno dei quantificatori di espressioni regolari che abbiamo toccato nell’elenco precedente era il simbolo +. Questo simbolo corrisponde a uno o più caratteri. Ciò significa che:
Ciao+
Abbina tutto da “Ciao” a “Ciaooooooooooo”. Questo perché tutti i quantificatori sono considerati “greedy” per impostazione predefinita. Tuttavia, se lo modifichi in modo che sia “lazy” utilizzando un punto interrogativo (?) come nell’esempio, il comportamento cambia.
Ciao+?
Ora, la regex cercherà di fare match il minor numero di volte possibile. Poiché l’icona + significa “uno o più”, corrisponderà solo a una “o”. Ciò significa che se inseriamo la stringa “Ciaooooo”, solo “Ciao” verrà matchato.
Anche se questo non è particolarmente utile da solo, se combinato con corrispondenze più ampie come il simbolo . (punto), diventa estremamente importante. Il simbolo . (punto) infatti è usato in regex per trovare “qualsiasi carattere”.
Ci.*o
Questa regex restituirà un match con “Ciao”, “Ciadshfjeo” e “Cia1234o”. Prova tu stesso: https://regex101.com/r/DlYCvq/1
Conclusione
Per fare i nostri test con le espressioni regolari utilizziamo https://regex101.com/ . Puoi utilizzarlo anche tu per iniziare a provare con mano le regex.
In questa sezione abbiamo visto come utilizzare i quantificatori. Nel prossimo articolo andremo ancora più in profondità e vedremo altri strumenti che rendono le regex estremamente potenti.