Rimuovere BR (line break) eccetto uno per linea con PHP o con Smarty grazie alle regular expressions

Con le espressioni regolari è possibile manipolare un testo preformattato per adattarlo alle nostre necessità. Vediamo qualche esempio in PHP o Smarty (per piattaforme come PrestaShop)

Immaginiamo di avere un testo formattato in questo modo

Testo di prova\n
Altro testo di prova\n
\n\n
Ancora un testo di prova\n

Con PHP, usando un nl2br($miastringa) ci ritroveremo qualcosa formattato in questo modo

Testo di prova<br />
Altro testo di prova<br />
<br />
<br />
Ancora un testo di prova<br />

Gli spazi tra la seconda e la terza linea potrebbero essere troppi, quindi con le espressioni regolari possiamo ovviare a questo problema. Sempre con PHP potremo fare qualcosa del tipo:

$miastringa = nl2br($miastringa);
$miastringa = preg_replace('#<br />(\s*<br />)+#', '<br />', $miastringa);

Nel caso stiate usando PrestaShop, e quindi dovete fare questa modifica direttamente nel tema, vi troverete a dover lavorare con Smarty. Il procedimento è simile, cambia leggermente la sintassi:

{$miastringa|nl2br|regex_replace:"#<br />(\s*<br />)+#":"<br />"}

oppure

{$miastringa|regex_replace:"/[\n]/":"<br />"|regex_replace:"#<br />(\s*<br />)+#":"<br />"}

In entrambi i casi il risultato sarà il seguente:

Testo di prova<br />
Altro testo di prova<br />
Ancora un testo di prova<br />