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.

Viviamo in un mondo avaro, baby! 81<br />

”1”2”3<br />

Come si comporta la regexpr? Facciamo una completa analisi della logica usata per<br />

tentare il match. Mano a mano che procediamo nella simulazione della logica della<br />

regexpr, “taglieremo” per così dire le parti di testo che hanno fallito definitivamente il<br />

match.<br />

Il primo tentativo avviene sul primo carattere di virgolette in posizione 1. Il match su<br />

quel carattere è positivo in quanto il primo carattere della stringa deve essere un carattere<br />

di virgolette. Quindi si procede al carattere successivo. La seconda virgoletta non è però<br />

accettabile in quanto il carattere successivo può essere qualsiasi tranne la virgoletta stessa.<br />

Il motore che esegue la ricerca decide che questa via è definitivamente infruttuosa e<br />

ne tenta un’altra. Scartato il primo carattere, prova ripartendo dal secondo; la stringa<br />

rimanente risulta così essere:<br />

”2”3<br />

secondo tentativo<br />

Questo è prevedibilmente positivo sul primo carattere (ossia quello in posizione 2), ma<br />

nuovamente il secondo carattere (in posizione 3) non soddisfa il match per lo stesso motivo<br />

per il quale il carattere in posizione 2 non lo soddisfaceva al tentativo precedente.<br />

Nuovamente si decide che questa strada non può portare ad alcun match e si intraprende<br />

un terzo tentativo. Quest’ultimo risulta ancora più breve.<br />

”3<br />

terzo tentativo<br />

La terza virgoletta è conforme al match ma dopo di essa non segue più alcun carattere.<br />

Questo determina il fallimento definitivo anche di questo tentativo e per conseguenza<br />

dell’intera regexpr sulla stringa.<br />

Ammettiamo ora di voler sperimentare come si comporti la regexpr dopo una breve<br />

plastica. Diciamo che il punto di domanda diventa un asterisco, con il seguente risultato:<br />

/"[^"]*"/<br />

Riesaminiamo il processo di ricerca a partire da zero. La stringa è sempre costituita da<br />

tre virgolette in sequenza:<br />

”1”2”3<br />

Tentando con il primo carattere anche questa regexpr leggermente differente ha successo.<br />

È già a partire dal secondo carattere che si ha una notevole differenza di comportamento.<br />

Il secondo carattere può essere tanto un carattere qualsiasi purché differente da una<br />

virgoletta, quanto una virgoletta. Attenzione: la ridondanza è solo apparente. C’è infatti<br />

sostanziale differenza fra incontrare una virgoletta e un altro carattere. Una virgoletta<br />

chiuderebbe il match, mentre un altro carattere no, consentendo di cercare un ulteriore<br />

carattere diverso da una virgoletta.<br />

In sostanza la regexpr al secondo carattere di virgolette (in questo caso) è già<br />

soddisfatta. Questo comporta che la porzione di testo riscontrata viene ritornata come<br />

esito della ricerca e la riga viene abbandonata. Infatti una regexpr non tenta mai<br />

autonomamente un secondo match su una riga che ne ha già prodotto uno. 10<br />

Se il carattere in posizione 2 fosse stato un altro (es. una lettera c) il match non si<br />

sarebbe concluso lì, ma sarebbe proseguito sino al terzo carattere, risultando nella stringa<br />

"c". Non pensate mai tuttavia che se una stringa contiene un match più ricco (contenente<br />

più caratteri) le regexpr lo preferiscano ad uno più povero. Non è questo lo scopo<br />

10 A meno che questo non venga esplicitamente richiesto.<br />

“Opzioni ed altre meraviglie”<br />

Si veda a proposito il paragrafo

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

Saved successfully!

Ooh no, something went wrong!