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