You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Un carattere solitario 77<br />
Simbolo Significato<br />
? zero o una volta<br />
+ una o più volte<br />
* zero o più volte<br />
Vediamo subito un esempio di applicazione. Supponiamo di voler cercare tutte le<br />
occorrenze di stringhe (sequenze) di caratteri costitutite da un numero indefinito di<br />
lettere “a” Senza i quantificatori avremmo dovuto scrivere una serie di regexpr come:<br />
/a/, /aa/, /aaa/, /aaaa/, e così via fino a chè la pazienza non ci avesse abbandonato,<br />
per poi eseguire tutti questi confronti sul testo in sequenza. Grazie ai quantificatori<br />
possiamo scrivere la ben più concisa ed elegante:<br />
/a+/<br />
che significa letteralmente: una stringa di testo composta da una o più lettere a.<br />
Il lettore attento 3 avrà notato come ci sia una spiccata somiglianza fra i quantificatori<br />
delle regexpr e i caratteri di espansione (file globbing) delle shell.<br />
Accanto a questi tre quantificatori, esiste un sintassi più flessibile per quantificare gli<br />
elementi di una regexpr, basata sulle parentesi graffe. La forma generale è la seguente:<br />
{min,max}, dove min è il minimo numero di volte che quell’elemento deve essere reperito,<br />
mentre max è prevedibilmente il massimo numero. Volendo quindi reperire una stringa di<br />
almeno tre “a”, ma non più di cinque, si può usare questa regexpr:<br />
/a{3,5}/<br />
la quale corrisponde alle stringhe “aaa”, “aaaa” e “aaaaa”. I due elementi non sono<br />
obbligatori, 4 il che consente di creare definizioni aperte di limiti. Se si volesse cercare una<br />
stringa di almeno tre lettere “a”, sarebbe sufficiente la semplice:<br />
/a{3,}/<br />
Notate come il secondo termine è stato omesso, rendendo non vincolante il numero di<br />
caratteri oltre il terzo.<br />
Detto questo, possiamo notare come i tre caratteri di quantificazione (?, + e *) siano<br />
in realtà delle forme abbreviate per comodità di casi particolari di questa sintassi:<br />
Simbolo Sintassi esplicita<br />
? 0,1<br />
+ 1,<br />
* 0,<br />
È infine importante notare come i quantificatori delle regexpr danno la misura di quante<br />
volte possa riscontrarsi l’elemento che li precede. Da soli non hanno alcun significato!<br />
Quindi la regexpr:<br />
/*/<br />
(volta probabilmente a riscontrare stringhe di testo di zero o più caratteri qualsiasi)<br />
semplicemente non ha alcun significato, in quanto l’asterisco non quantifica nulla. Come<br />
si risolve correttamente questo problema?<br />
3 Tutti i testi seri di informatica hanno un lettore attento. Perchè noi dovremmo essere da<br />
meno? (Preghiamo pertanto il gentile pubblico perchè ci faccia pervenire segnalazioni circa<br />
l’avvenuta lettura di questa nota.)<br />
4 A seconda del programma che state usando, il primo può essere obbligatorio oppure no; se<br />
lo è, specificando un valore pari a 0 si ottiene lo stesso risultato che omettendolo