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>','<blu>\\1</blu>',$postedValue);
$postedValue = eregi_replace('<font color= "red">(.+)</font>','<rosso>\\1</rosso>',$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...