A lo que vengo es que estas es haciendo un PARSER. Si eso es complicado, de hacerlo manualmente.
El punto es que el HTML (asi como el C++) son muy dificiles de parsear. Hay muchas formas en como las supociciones se convierten en problemas. Nada te garantiza que el html siga exactamente lo que uno piensa. Aun cuando un programa lo genera, vaya uno a saber si DOS veces y SIEMPRE hara lo mismo. En el momento que pase:
Código PHP:
<FONT SIZE=-2 bgcolor=FFFF> //otros atributos
Sector programación</FONT>
<FONT SIZE=-2> Sector programación</FONT> //dos espacios
<FONT SIZE=-2>
Sector programación</FONT>
<FONT SIZE=-2>
Sector > programación</FONT>
<FONT SIZE=-2>&nspSector programación</FONT> //meteria un espacio mas
<FONT> </FONT> //una etiqueta vacia
<FONT> Sector >programación <-- comentario html --/></FONT>
y aunque en fin, tal vez me estoy imaginando los problemas, en armar parsers SOLO se deben cubrir los casos VALIDOS y olvidar los invalidos.
De hecho, la logica de lo que piensas hacer es mas o menos:
Detectar las etiquetas FONT, ir al caracter de cierre, mirar si hay espacios, insertar los caracteres.
Me tome la molestia de armar una expresion regular y ademas te la explico:
Código PHP:
\<FONT(?<atributos>.*)\>(?<espacio>\s)+(?<titulo>.+)\<\/FONT\>
Cita:
\< = detectar a "<" tal cual (es como evitar que se cojan los comandos / caracteres reservados del lenguaje de expresiones regulares
FONT = Detectar la secuencia exacta de caracteres FONT
(?<atributos>.*) = Realizar una captura con el nombre atributos
.* =Cualquier secuencia de caracteres con espacios y todo
\> = detectar a ">" tal cual
(?<espacio>\s) = Realizar una captura con el nombre espacio
\s = Detecta un espacio
+ = La captura anterior, ejecutarla por lo menos por un espacio detectado hasta cuantos espacios existan
(?<titulo>.+) = Realizar una captura con el nombre titulo
.+ = Cualquier secuencia de caracteres que sea encontrada AL MENOS una vez
|
Como vez, un monton de logica de programacion condensada en una linea de codigo
Para reemplazar:
Código PHP:
<FONT ${atributos}> ${titulo}</FONT>
Esta expresion cubre MUCHAS mas posibilidades que el codigo que estabas planteando, aunque de los ejemplos que te mostre no cojeria si hay un ENTER entre los caracteres del titulo. Por ejemplo captura
Código PHP:
<FONT SIZE=-2> Sector programación/FONT>
<FONT SIZE=-2> Sector programación/FONT>
<FONT> Sector programación/FONT>
<FONT> Sector >programación</FONT>
pero no:
Código PHP:
<FONT SIZE=-2 bgcolor=FFFF> Sector programación/FONT>
<FONT
<FONT SIZE=-2 bgcolor=FFFF> Sector programaciónFONT>
<FONT>Sector programación</FONT> //Si quieres que esta la coja, cambia + por * despues de captura con nombre espacio
Todavia quedan varios casos por fuera, pero es la idea...