You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Infrangiamo (apparentemente) un po’ di regole<br />
è possibile unirle? Basta applicare una semplice classe al primo carattere, in questa<br />
maniera:<br />
/[Cc]orso di UNIX/<br />
6.6 Infrangiamo (apparentemente) un po’<br />
di regole<br />
• Alle classi di caratteri si possono applicare i quantificatori. Questa è solo<br />
un’infrazione parziale. Abbiamo stabilito che un quantificatore si applica al carattere<br />
che lo precede. Un’interpretazione pedante e ottusa di quasta regola potrebbe dedurre<br />
che in:<br />
/[abc]*/<br />
l’asterisco si applichi solo al carattere “]”. Le regexpr sono in realtà più lungimiranti<br />
e applicano il quantificatore all’intera classe.<br />
L’infrazione è infatti solo apparente in quanto una classe di caratteri non è altro<br />
che un insieme di caratteri dal quale estrarre un solo carattere. Vista in questi termini,<br />
la regola si applica ancora come quando l’abbiamo definita. 6<br />
La classe mantiene la sua natura per tutta la ricerca. Per intenderci: se viene<br />
trovata una prima occorrenza del carattere “a”, questo non significa che di lì in<br />
avanti /[abc]*/ diventa equivalente a /a*/. Il carattere successivo può essere<br />
uno qualsiasi dei tre inclusi. L’ultima regexpr data reperisce quindi tutte le<br />
seguenti stringhe: “aaaa”, “ababcb”, “abcabcabc”, “bcabcaacb”, “aaaaaaaab”<br />
e così via.<br />
Attenzione: L’ordine con il quale vengono inclusi i caratteri non è rilevante.<br />
Questo significa che /[abc]*/ e /[cba]*/ sono due modi totalmente<br />
equivalenti di scrivere la stessa classe di caratteri. Come corollario si ha che<br />
/[caso]*/ non individua solo “caso” ma anche “sacco” e “caos”. 7<br />
• Le classi di caratteri possono essere negate. Esiste cioè la possibilità di costruire<br />
l’inverso di una classe di caratteri descrivendo quella classe e facendola precedere con<br />
l’accento circonflesso (\^). In pratica è come dire che una classe di caratteri include<br />
tutti i caratteri possibili tranne quelli espressamente specificati. 8<br />
Ipotizziamo di voler cercare tutte le sequenze di caratteri che non contengano la<br />
lettera “a”. Il modo più semplice ed efficace di scrivere questo è:<br />
6 Anche se questo presto finirà.<br />
8 Un modo alternativo per vedere una classe normale è quello di pensarla come nessun carattere<br />
tranne quelli esplicitamente specificati, che però ha significato giusto come contraltare di una<br />
classe negata.<br />
79