Foros del Web » Programando para Internet » PHP »

Referencia hacia atras (expr. regular)

Estas en el tema de Referencia hacia atras (expr. regular) en el foro de PHP en Foros del Web. Hola a todos! (otra vez) Necesito substituir los <strong> </strong> por <i> </i> y quiero hacerlo con expr. regulares por si los tags vienen con ...
  #1 (permalink)  
Antiguo 02/09/2009, 08:48
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 15 años, 3 meses
Puntos: 10
Pregunta Referencia hacia atras (expr. regular)

Hola a todos! (otra vez)

Necesito substituir los <strong> </strong> por <i> </i> y quiero hacerlo con expr. regulares por si los tags vienen con css adentro.

No he podido...... porque me toma el "par" entre el primer <strong> y el ultimo si hay varios!

Cita:
la casa de <strong>Pedro Perez</strong> esta en <strong><a title="pepe" href='http://www.google.com/'>Google</a></strong>, y la mia no<p/>
lo transforma en....

Cita:
la casa de <i>Pedro Perez</strong> esta en <strong><a title="pepe" href='http://www.google.com/'>Google</a></i>, y la mia no
Me doy cuenta que el problema se soluciona con "backreference" pero no he podido...

Podran ayudarme ? MUCHAS GRACIAS!
  #2 (permalink)  
Antiguo 02/09/2009, 08:50
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Referencia hacia atras (expr. regular)

Verifica usando str_replace
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 02/09/2009, 09:00
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 15 años, 3 meses
Puntos: 10
Respuesta: Referencia hacia atras (expr. regular)

Amigo ABI: ya se que puede hacerse con str_replace() ... pero no es tan "flexible" y ademas.. no quiero hacer el reemplazo SIEMPRE... sino que puedo no hacerlo y eso lo decido en mi funcion callback.

Aca lo que tengo hecho:

Código lo hecho:
Ver original
  1. <?
  2.   $html='la casa de <strong>Pedro Perez</strong> esta en <strong><a title="pepe" href=\'http://www.google.com/\'>Google</a></strong>, y la mia no';
  3.  
  4.   echo $html."<p/>\n\n\n" ;
  5.   echo strong_per_italic($html);
  6.  
  7.   function strong_per_italic($html){
  8.       return preg_replace_callback("|<strong>(.*)</strong>|is","intercambio",$html);
  9.   }
  10.    
  11.   function intercambio($matches){    
  12.       return '<i>'.$matches[1].'</i>';
  13.   }
  14. ?>
  #4 (permalink)  
Antiguo 02/09/2009, 09:07
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Referencia hacia atras (expr. regular)

Lo unico que te falto fue un simbolo de ? asi te debe funcionar

Código PHP:
Ver original
  1. <?php
  2.   $html='la casa de <strong>Pedro Perez</strong> esta en <strong><a title="pepe" href=\'http://www.google.com/\'>Google</a></strong>, y la mia no';
  3.  
  4.   echo $html."<p/>\n\n\n" ;
  5.   echo strong_per_italic($html);
  6.  
  7.   function strong_per_italic($html){
  8.       return preg_replace_callback("|<strong>(.*?)</strong>|is","intercambio",$html);
  9.   }
  10.    
  11.   function intercambio($matches){    
  12.       return '<i>'.$matches[1].'</i>';
  13.   }

Un consejo no uses la estructura corta de <? sino de <?php.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 02/09/2009, 09:55
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 15 años, 3 meses
Puntos: 10
Respuesta: Referencia hacia atras (expr. regular)

ABI: mil gracias! no pensé que fuera tan poco lo que me faltaba

  #6 (permalink)  
Antiguo 02/09/2009, 10:18
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 15 años, 3 meses
Puntos: 10
Respuesta: Referencia hacia atras (expr. regular)

ABI: mil gracias! no pensé que fuera tan poco lo que me faltaba

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:57.