I quantificatori nella Regex

I quantificatori sono dei simboli speciali usati nelle espressioni regolari per selezionare una quantità variabile di caratteri nel testo che rispettano la stessa condizione.

Come usare i quantificatori nella Regex? Nelle espressioni regolari i quantificatori devono essere messi subito dopo la condizione da quantificare.

Il quantificatore +

Il simbolo + è il quantificatore per selezionare uno o più caratteri che rispondono a una determinata condizione.

Esempio 1

Per selezionare i numeri nel testo, scrivo la seguente espressione regolare.

\b\d+\b

La regex individua tutte le stringhe comprese tra due bordi (/b) e composte esclusivamene da cifre numeriche (/d).

L'espressione regolare seleziona le stringhe indipendentemente dalla loro lunghezza.

Esempio 2

Posso usare il quantificatore + anche per indicare la lunghezza variabile delle stringhe selezionate con un set di caratteri.

In questo caso, il quantificatore + va posto dopo la parentesi quadra di chiusura del gruppo.

\b[0-9]+\b

Il risultato finale è sempre lo stesso. La regex seleziona soltanto i numeri presenti nel testo.

Esempio 3

In quest'altro esempio utilizzo il quantificatore + dopo il simbolo \w del carattere di una parola.

\b\w+\b

Così facendo, seleziono tutte le parole presenti in un corpus del testo, indipendentemente dalla loro lunghezza.

Esempio 4

In questa espressione regolare provo a selezionare gli indirizzi email presenti nel testo

\w+@\w+\.\w

La prima parte della stringa ( \w+@ ) trova i caratteri prima della chiocciola.

La parte intermedia ( \w+\. ) trova il nome del dominio fino al punto.

L'ultima parte ( \w ) seleziona l'estensione del dominio. Ad esempio, .it, .com, ecc.

Esempio. Ecco un esempio pratico di funzionamento dell'espressione regolare.
come trovare gli indirizzi di posta elettronica nel testo tramite le espressioni regolari

Il quantificatore *

Il quantificatore * seleziona zero o più occorrenze dell'espressione precedente.

Esempio

Voglio selezionare i nomi dei siti web con estensione ".com" in un testo.

Tuttavia, alcuni siti hanno i "www" prima del nome mentre altri no.

Per selezionare entrambe le forme scrivo la seguente espressione:

[\w+\.]*\w+\.com

La componente [\w+\.]* della regex seleziona il "www." nei domini se presente, mentre la seconda componente \w+\.com seleziona il nome di dominio.

Esempio. La regex seleziona sia i domini con www che quelli senza. Grazie alla presenza del quantificatore *, l'assenza del www non pregiudica la selezione del nome di dominio prima dell'estensione ".com".
la regex seleziona sia i domini con www che senza

Il quantificatore ?

Il quantificatore ? seleziona zero o una occorrenza dell'espressione precedente.

Esempio

Voglio selezionare il protocollo usato in un elenco di siti web. Alcuni siti usano il protocollo http mentre altri l'https.

Per selezionarli entrambi con un'unica espressione scrivo nel seguente modo:

http[s]?

Questa semplice regex seleziona sia le stringhe "http" e sia "https".

Il quantificatore ? agisce soltanto sul carattere immediatamente precedente.

In questo caso si tratta di un set di caratteri [] composto soltanto dal carattere "s" che può esserci oppure meno. La stringa iniziale "http" è invece necessaria per il matching.

Esempio. Ecco una dimostrazione pratica del funzionamento.
esempio di utilizzo del quantificatore ?

Il numero di ripetizioni {}

Nei quantificatori +, *, ? posso specificare tramite le parentesi graffe {} il numero n delle ripetizioni delle occorrenze da selezionare.

{n}

Le parentesi seguono immediatamente il carattere o il quantificatore da considerare.

Esempio 1

Voglio selezionare le parole di 5 caratteri presenti in un testo.

Senza quantificatore l'espressione regolare è scritta in questo modo:

\b\w\w\w\w\w\b

Utilizzando il quantificatore delle ripetizioni, la stessa regex è più contratta.

\b\w{5}\b

Il risultato finale è sempre lo stesso.

Esempio. Ecco un esempio pratico.
il numero delle ripetizioni

Il quantificatore delle ripetizioni è particolarmente utile perché mi consente anche di specificare un intervallo di ripetizioni, tra un numero minimo (n) e un numero massimo (m).

\w{n,m}

Ad esempio, per selezionare tutte le parole composte da 2, 3, 4 o 5 caratteri, posso scrivere:

\b\w{2,5}\b

La regex seleziona tutte parole che soddisfano questa caratteristica.

Esempio. Ecco un altro esempio pratico di utilizzo.
un esempio di utilizzo del quantificatore

Il quantificatore mi permette anche di specificare soltanto il valore minimo.

\b\w{5,}\b

La precedente regex seleziona tutte le parole con 5 lettere o più. E' particolarmente utile se non conosco la lunghezza massima delle occorrenze.

In questo caso l'intervallo è aperto a destra.

Esempio. Ecco un esempio pratico.
esempio pratico di utilizzo del quantificatore delle ripetizioni con l'intervallo aperto

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FAQ

  1. L'espressione regolare \w+@\w+\.\w non seleziona gli indirizzi di posta elettronica che hanno il punto o il trattino all'interno del nome dell'email o del dominio.

    Risposta. E' vero, il carattere /w non seleziona i simboli di punteggiatura, tra cui il punto (.) e il trattino (-). Per scrivere un'espressione regolare completa è necessario riscrivere la regex includendo manualmente i simboli mancanti tramite un set di caratteri [\w.-]+. Ad esempio [\w.-]+@[\w.-]+\.\w+

FacebookTwitterLinkedinLinkedin
knowledge base
  1. I quantificatori
  2. La ricerca greedy o lazy
  3. I gruppi
  4. I gruppi passivi
  5. La backreference
  6. La selezione alternativa