28.05.2013 Views

LOA HackLab - Autistici

LOA HackLab - Autistici

LOA HackLab - Autistici

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Meglio poter scegliere 83<br />

fallirà ancora più miserrimamente, ottenendo un match istantaneo, in prima posizione,<br />

su qualsiasi riga di testo, che essa contenga zero o dieci o cento o 1024 o 4 Terabyte<br />

di caratteri. 14 Questo è dovuto al fatto che una simile regexpr cerca una stringa nulla (o<br />

vuota, se il termine è più immediato ed universale), ed un simile tipo di stringa si può<br />

ottenere come sottostringa da qualsiasi stringa.<br />

Se una stringa contiene zero caratteri, essa stessa sara’ una stringa nulla. Ma se una<br />

stringa di carattere ne contiene uno, come conseguenza questa contiene anche ben due<br />

sottostringhe nulle: una prima ed una dopo del carattere. Non è forse immediato per il<br />

lettore alle prime armi, ma è così che ragionano le regexpr ed anche voi, fra pochi mesi!<br />

6.9 Commenti indiscreti<br />

Domanda: come si fa ad includere un $ in una regexpr senza intendere la fine della riga?<br />

Domanda: è possibile includere un “-” dentro una classe di caratteri senza che questo sia<br />

interpretato come un separatore di un intervallo di caratteri? Domanda: si può includere<br />

una parentesi quadra aperta “[” senza che questa venga interpretata come un inizio di<br />

classe di caratteri?<br />

Si! Per raggiungere questo scopo è sufficiente commentare i caratteri con il carattere<br />

speciale di backslash (\). Quindi \$, \- e \[ raggiungono lo scopo. Per ovvia<br />

conseguenza, per ottenere un backslash sarà sufficiente commentarlo con un backslash.<br />

Ad esempio, se volessimo una regexpr in grado di riconoscere sia filename UNIX che<br />

Windows, avremmo bisogno di cercare stringhe separate sia da slash (UNIX) che da<br />

backslash (Windows), con la regexpr:<br />

/[\/\\]/<br />

Lo slash necessita di commento in quanto sarebbe altrimenti interpretato come fine della<br />

regexpr /[/ che è inderogabilmente un non senso. In qualsiasi contesto esso richiede un<br />

backslash di commento, come in:<br />

/\/usr\/local\/bin/<br />

che cerca le occorrenze della stringa “/usr/local/bin”. Se gli slash non fossero commentati,<br />

il secondo chiuderebbe la definizione della regexpr e dal terzo carattere in avanti (la<br />

“u” di “usr”) sarebbe tutto considerato un enorme errore sintattico.<br />

6.10 Meglio poter scegliere<br />

Come già visto per i caratteri, è possibile definire classi alternative di stringhe di testo<br />

arbitrario da utilizzare come alternativa in un match. La sintassi è piuttosto semplice.<br />

Una pipe (“|”) separa gli elementi. Ad esempio:<br />

avrebbe anche potuto scriversi:<br />

/[Cc]orso di UNIX/<br />

14 L’informazione sulla riga da 4 Terabyte è solo supposta, non avendo mai avuto nessuno degli<br />

autori disco a sufficienza per tentare di realizzare una simile stringa

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

Saved successfully!

Ooh no, something went wrong!