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”.

espressioni regolari

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.