L’immensa utilità delle espressioni regolari

Dopo anni di onorato servizio ho mandato in pensione il plugin WP CodeBox, che mi serviva per pubblicare righe di codice senza che WordPress le eseguisse ed evidenziandone anche la sintassi in base al linguaggio. Funziona bene il plugin, ma c’è stato sempre un aspetto che, pur sopportandolo, non mi andava giù: durante la scrittura del post contenente codice, dovevo restare in modalità HTML senza passare a quella Visuale, altrimenti tutti i caratteri come < venivano trasformati nelle rispettive entità HTML.

Ho deciso, quindi, di provare il plugin SyntaxHighlighter Evolved che fa la stessa cosa del precedente ma usando gli shortcode e preservando i caratteri anche in modalità Visuale. Tra gli altri vantaggi, questo plugin è sviluppato insieme ad Automattic ed è pure usato su wordpress.com.

Ecco cosa ho combinato: magari vi torna utile.

Per procedere alla sostituzione del plugin, ho dovuto cambiare qualcosa nei post e precisamente tutte le volte che ricorreva una riga come questa

<pre lang="php">Righe di codice</pre>

bisognava cambiarla in

[code lang="php"]Righe di codice[/code]

Nel 96% dei post ricorrevano righe simili a questa: un lavoro pazzesco da far desistere chiunque. Ma avendo già utilizzato le Espressioni regolari (dette anche Regex) per un altro mio progetto grazie a un plugin di WordPress, ho pensato di tentare lo stesso. Il plugin Search Regex, infatti, vi dà la possibilità di provare le stringhe di ricerca finché non siete sicuri del risultato e vi mostra a video il cambio che opererà. Una sorta di anteprima, insomma. Occhio che, in ogni caso, è un plugin tanto potente e utile quanto pericoloso, per cui è d’obbligo un backup del database.

Dopo l’ovvio backup, dall’interfaccia di Search Regex ho effettuato più passaggi, sia nei post che nei commenti. Ho cominciato dai commenti, dove avevo solo 23 risultati. Ho cercato:

/<pre lang="(.*?)">/

e l’ho sostituito con:

[code lang="$1"]

Visto che l’anteprima mi soddisfaceva ho dato l’OK per il cambio.

Poi ho sostituito:

/<\/pre>/

con:

[/code]

Ho quindi verificato in alcuni commenti a campione e tutto è risultato perfetto. Passo ai post ed effettuo le stesse operazioni di sopra (471 per l’esattezza). A queste aggiungo altre sostituzioni: cambio line= in firstline=, lang="apache" in lang="plain" (non c’è la sintassi per Apache) e infine lang="html4strict" in lang="html".

Il controllo finale ha dato gli esiti sperati! In pochissimi istanti ho ottenuto un risultato che altrimenti avrebbe impiegato troppo tempo.

Non so usare le espressioni regolari, nel senso che non le ho mai studiate: ho solo qualche appunto su Tomboy, ma tutto sommato non è stato difficile.

Photo courtesy: cackhanded, A regexp to match regexp, CC by-nc.

aldolat

Il blocco note di Aldo.


Come ho cambiato, in quasi tutti i post e i commenti, una serie di stringhe in altre usando le espressioni regolari.