28.05.2013 Views

LOA HackLab - Autistici

LOA HackLab - Autistici

LOA HackLab - Autistici

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!