Ver Mensaje Individual
  #9  
Antiguo 22-04-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
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
 
<FONTSector >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}>&nbsp${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=-2Sector programación/FONT>
 <
FONT  SIZE=-2>                     Sector programación/FONT>
 <
FONTSector programación/FONT>
 <
FONT>            Sector >programación</FONT
pero no:

Código PHP:
 <FONT  SIZE=-2 bgcolor=FFFF>&nbspSector programación/FONT>
 <
FONT  
 
<FONT  SIZE=-2 bgcolor=FFFFSector 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...
__________________
El malabarista.
Responder Con Cita