La mia base di partenza funzionante è questa:
codice:
$variabile = preg_replace("/<span style=\"text-decoration: underline;\">([^<]*)<\/span>/si","<u>\$1</u>",$variabile);
Questo frammento di codice mi riconosce il contenuto del tag <span> con lo style "underline" e me lo sostituisce con i (deprecati ma comodi per il resto dell'elaborazione) tag <u>
Ora questo pezzo di codice non mi basta più perché, all'interno del tag span potrei avere un tag [b], [i] o, semplicemente "1 < 2".
Vorrei migliorare questa funzione escludendo solo tag <span> all'interndo di questo. Ho provato con questa variante
codice:
"/<span style=\"text-decoration: underline;\">([^(<span)]*)<\/span>/si"
Ma non riconosce nessuna stringa. Bazzicando per internet, ho trovato questa soluzione
codice:
"/<span style=\"text-decoration: underline;\">((?!.*<span).*)<\/span>/si"
Che riconosce una stringa, ma la sostituzione viene fatta alla "membro di segugio", non in tutte le occorrenze, e tagliando la parte del testo dentro il tag.
(le espressioni regolari ho un po' di difficoltà a tirarci fuori le gambe)