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.