ciao a tutti.

ho un problema non banale con le espressioni regolari.
ho l'esigenza di tradurre del codice html molto sporco (generato da word e incollato in un campo di testo) in xml. in alcuni casi è possibile gestire la traduzione con delle semplici str_replace(), mappando i tag html e sostituendoli con i relativi tag xml.

in altri casi però ho bisogno di tradurre porzioni di testo del tipo

<font color="blue">testo variabile</font><font color="red">altro testo variabile</font>

in codice xml del tipo <blu>testo variabile</blu><rosso>altro testo variabile</rosso>

in questo caso ovviamente non è possibile operare una semplice sostituzione di stringa, in quanto il tag </font> chiude due elementi diversi.
ho provato a utilizzare le espressioni regolari e eregi_replace() in questo modo, considerando $postedValue come la stringa da tradurre:

$postedValue = eregi_replace('<font color= "blue">(.+)</font>','&lt;blu&gt;\\1&lt;/blu&gt;',$postedValue);
$postedValue = eregi_replace('<font color= "red">(.+)</font>','&lt;rosso&gt;\\1&lt;/rosso&gt;',$postedValue);

il problema con eregi_replace() sembra essere che utilizzando la notazione (.+), il parser va a considerare l'ultimo </font> come quello su cui "fermarsi" inglobando quindi il primo </font> nella (.+)
c'è un modo per limitare l'eregi_replace() alla prima occorrenza di </font>, anzichè all'ultima?

spero di non essere stato troppo criptico...