Foros del Web » Programando para Internet » PHP »

Remplazando tag con preg_replace

Estas en el tema de Remplazando tag con preg_replace en el foro de PHP en Foros del Web. Buenas, tengo esta linea : Cita: $txt=preg_replace('^\[color=(.*?)\](.*?)\[\/color\]^', '<font color="\\1">\\2</font>', $txt); Para remplazar esto: [color=red ]algo[/color ] por esto: <font color="red"></font> Pero el problema es cuando ...
  #1 (permalink)  
Antiguo 06/05/2011, 18:19
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 17 años, 1 mes
Puntos: 4
Remplazando tag con preg_replace

Buenas, tengo esta linea :

Cita:
$txt=preg_replace('^\[color=(.*?)\](.*?)\[\/color\]^', '<font color="\\1">\\2</font>', $txt);
Para remplazar esto:

[color=red ]algo[/color ] por esto: <font color="red"></font>

Pero el problema es cuando tengo algo asi:

[color=orange ][color=red ]Prueba[/color ][/color ] ya que queda:

<font color="orange">[color=red ]Prueba</font>[/color ]

Como puedo resolverlo para que remplace también los que están anidados ?

Última edición por WebDeveloperZ; 07/05/2011 a las 00:54
  #2 (permalink)  
Antiguo 08/05/2011, 17:23
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Remplazando tag con preg_replace

La única forma que se me ocurre es usar un bucle llamando a la función varias veces hasta que este cambiado.

El problema está en que una vez que ha sustituido una parte de la cadena no la vuelve a evaluar.

Puedes utilizar la función preg_match para ver si coincide alguna parte de la cadena con la expresión regular para saber cuando parar el bucle.

Algo así:

Código PHP:
Ver original
  1. do{
  2. $txt=preg_replace('^\[color=(.*?)\](.*?)\[\/color\]^', '<font color="\\1">\\2</font>', $txt);
  3. while (preg_match('^\[color=(.*?)\](.*?)\[\/color\]^', '<font color="\\1">\\2</font>' )> 0)

Última edición por alexg88; 08/05/2011 a las 17:35
  #3 (permalink)  
Antiguo 08/05/2011, 18:48
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Remplazando tag con preg_replace

Gracias, seria asi en realidad:

Código:
    while (preg_match('^\[color=(.*?)\](.*?)\[\/color\]^', $txt )> 0){
        $txt=preg_replace('^\[color=(.*?)\](.*?)\[\/color\]^', '<font color="\\1">\\2</font>', $txt);
    }

Etiquetas: tag
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 14:32.