Condividi tramite


Quantificatori in JScript

Per i casi in cui non è possibile specificare il numero di caratteri che costituiscono una corrispondenza, le espressioni regolari supportano il concetto di quantificatore. I quantificatori consentono di specificare il numero di occorrenze di un determinato componente di un'espressione regolare necessario per ottenere una corrispondenza.

Significato dei quantificatori

Carattere

Descrizione

*

Trova zero o più corrispondenze con la sottoespressione o il carattere precedente. "zo*", ad esempio, corrisponde a "z" e "zoo". * equivale a {0,}.

+

Trova una o più corrispondenze con la sottoespressione o il carattere precedente. Ad esempio, "zo+" corrisponde a "zo" e "zoo", ma non a "z". + equivale a {1,}.

?

Trova zero o una corrispondenza con la sottoespressione o il carattere precedente. Ad esempio, "do(es)?" corrisponde a "do" in "do" o "does". ? equivale a {0,1}

{n}

n rappresenta un valore integer non negativo. Trova esattamente n corrispondenze. "o{2}", ad esempio, non corrisponde alla lettera "o" in "Bob", ma corrisponde alle due lettere "o" in "food".

{n,}

n rappresenta un valore integer non negativo. Trova almeno n corrispondenze. Ad esempio, "o{2,}" non corrisponde alla lettera "o" in "Bob", mentre corrisponde a tutte le lettere "o" in "foooood". "o{1,}" equivale a "o+". "o{0,}" equivale a "o*".

{n,m}

m e n sono valori integer non negativi, in cui n <= m. Trova almeno n e al massimo m corrispondenze. Ad esempio, "o{1,3}" corrisponde alle prime tre lettere "o" in "fooooood". "o{0,1}" equivale a "o?". Tra la virgola e i numeri non può essere inserito alcuno spazio.

Poiché in un documento di input di grandi dimensioni il numero dei capitoli può essere superiore a nove, è necessario disporre di un meccanismo per gestire numeri di capitolo di due o tre cifre. A tale scopo, è possibile utilizzare i quantificatori. La seguente espressione regolare corrisponde a titoli di capitoli contenenti qualsiasi numero di cifre:

/Chapter [1-9][0-9]*/

Il quantificatore viene riportato dopo l'espressione di intervallo. Viene quindi applicato all'intera espressione di intervallo, che in questo caso specifica soltanto le cifre comprese tra 0 e 9 (inclusi).

In questo caso non viene utilizzato il quantificatore + perché non è necessario che sia presente una cifra nella seconda posizione o in quelle successive. Il carattere jolly ? non viene inoltre utilizzato perché i numeri dei capitoli risulterebbero limitati a due sole cifre. In questo caso, si desidera ottenere una corrispondenza con almeno una cifra dopo la parola "Chapter" e uno spazio.

Se è noto che i numeri dei capitoli non superano il numero 99, è possibile utilizzare la seguente espressione per specificare almeno una cifra, ma non più di due.

/Chapter [0-9]{1,2}/

Il principale svantaggio dell'espressione sopra riportata consiste nel fatto che per un numero di capitolo superiore a 99 verrà trovata una corrispondenza soltanto per le prime due cifre. Un altro svantaggio è rappresentato dal fatto che si otterrebbe una corrispondenza con "Chapter 0". Per ottenere una corrispondenza soltanto con due cifre sono quindi preferibili le seguenti espressioni:

/Chapter [1-9][0-9]?/

oppure

/Chapter [1-9][0-9]{0,1}/

I quantificatori *, + e ? vengono definiti come generici perché consentono di ottenere il maggior numero possibile di corrispondenze con il testo. Talvolta può invece essere necessario ottenere una corrispondenza minima.

È possibile ad esempio cercare in un documento HTML un'occorrenza di un titolo di capitolo incluso in un tag H1. Nel documento, il testo viene riportato come segue:

<H1>Chapter 1: Introduction to Regular Expressions</H1>

La seguente espressione consente di ottenere una corrispondenza con tutti gli elementi della stringa, dal simbolo apertura "minore di" (<) al simbolo "maggiore di" (>) con cui viene chiuso il tag H1.

/<.*>/

Se si desidera ottenere una corrispondenza soltanto con il tag H1 di apertura, la seguente espressione specifica corrisponde soltanto a <H1>.

/<.*?>/

Inserendo ? dopo un quantificatore *, + o ?, l'espressione generica viene trasformata in una corrispondenza specifica o minima.

Vedere anche

Altre risorse

Introduzione alle espressioni regolari