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.

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

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

Saved successfully!

Ooh no, something went wrong!