Le espressioni regolari possono essere un vero toccasana in alcune situazioni. A gennaio ho avuto modo di apprezzare uno script di Andrea Giammarchi che ripuliva gli index delle directory se infetti da un JavaScript maligno. Tuttavia, in alcuni casi si può scegliere di fare a meno delle espressioni regolari preferendo soluzioni più semplici.
Per esempio, nella validazione, chiediamoci sempre: posso usare una funzione per la manipolazione delle stringhe (più veloce delle espressioni regolari)? Posso operare un filtraggio standard usando i FILTERs di PHP? In alcuni casi, come la verifica del formato di un'email, le espressioni regolari sono molto utili, a patto di utilizzare un pattern corretto e valido. In altri casi, invece, cercare l'espressione regolare perfetta può non essere l'approccio migliore.
Prendiamo il cognome di un utente: potrebbe essere "Rossi" o "De Rossi" o più combinazioni di gruppi di caratteri alfabetici. Vale la pena cercare di trovare un pattern che li comprenda tutti o non è meglio forse filtrare semplicemente i caratteri non validi (come quelli di formattazione o speciali).?
Ancora: è vero che le espressioni regolari sono molto efficaci per estrarre dati da documenti web, ma siamo sicuri che questo sia l'approccio giusto? Per esempio, la pagina che contiene i miei post su Edit segue questo pattern:
'#<p\sid="post-\d"><a\shref="http://blog.html.it/\d+/\d+/.+"\stitle=".+">.+</a></p>#'
o qualcosa di simile. Posso certamente usare una funzione di streaming unita a preg_match_all
per estrarre i link dei miei post (ovviamente lasciando solo gli elementi a
), ma il tutto si basa sull'ipotesi che quella struttura rimanga sempre la stessa. Le espressioni regolari, infatti, sono concepite per trovare pattern basati su una certa uniformità di struttura. Ma nel web reale le strutture non sono immutabili: cambiano. Quello che ha una data struttura oggi può cambiarla domani.
Insomma, come nella vita, tutto va preso cum grano salis: nella giusta misura. Per chi fosse interessato alle espressioni regolari, segnalo due risorse:
"Regular Expressions Cookbook" della O'Reilly e il sito Regular Expressions. Alla prossima!