[1] Come posso sperare di usare le espressioni regolari senza creare codice illeggibile e non manutenibile?
regex, leggibile regexp, leggibile
espressione regolare, leggibile /x
Ci sono tre tecniche che posso rendere le espressioni regolari manutenibili
e comprensibili.
Commenti all'esterno dell'espressione regolare
Descrivete quello che fate e come lo fate, usando i normali commenti del Perl
# trasforma una linea nella prima parola di essa, seguita da
# un segno di "due punti" e il numero di caratteri del resto della
# linea
s/^(\w+)(.*)/ lc($1) . ":" . length($2) /meg;
Commenti interni all'espressione regolare
Il modificatore /x fa in modo che gli spazi vengano ignorati
all'interno di un'espressione regolare (fatta eccezione per
le classi di caratteri), inoltre permette di usare i normali
commenti. Come potete immaginare, gli spazi e i commenti
aiutano molto.
/x vi consente di trasformare questo:
s{<(?:[^>'"]*|".*?"|'.*?')+>}{}gs;
in questo:
s{ < # parentesi angolare aperta
(?: # raggruppamento senza la creazione di riferimento
# all'indietro
[^>'"] * # 0 o piu` cose che non sono un >, ne' un ' ne' un "
| # o altrimenti
".*?" # una sezione tra doppi apici (match non-greedy)
| # o altrimenti
'.*?' # una sezione tra apici singoli (match non-greedy)
) + # il tutto una o piu` volte
> # parentesi angolare chiusa
}{}gsx; # sostituisci con nulla, cioe` cancella
Non è chiaro come un brano di prosa, ma è molto utile per
descrivere il significato di ciascuna parte del pattern.
Delimitatori differenti
Benché normalmente pensiamo a pattern delimitati da caratteri /,
essi possono essere delimitati da quasi qualunque carattere.
perlre descrive questo aspetto. Ad esempio, l'istruzione s/// usata
sopra usa le parentesi come delimitatori. Scegliere un altro
delimitatore può evitare la necessità di marcare il carattere
affinché sia interpretato letteralmente:
s/\/usr\/local/\/usr\/share/g; # cattiva scelta del delimitatore
s#/usr/local#/usr/share#g; # scelta migliore
Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan
Torkington. Tutti i diritti riservati.
Questa documentazione è libera; puoi ridistribuirla e/o
modificarla secondo gli stessi termini applicati al Perl.
Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di
codice in questo file sono rilasciati al pubblico dominio. Potete, e
siete incoraggiati a farlo, utilizzare il presente codice o qualunque
forma derivata da esso nei vostri programmi per divertimento o per profitto.
Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese
ma non è obbligatorio.
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per
porre quesiti di tipo tecnico, per rimanere aggiornato su meeting,
incontri, manifestazioni e novità su Perl.it. Iscriviti!