Foros del Web » Programando para Internet » PHP »

BBcode, expresiones regulares y los quote

Estas en el tema de BBcode, expresiones regulares y los quote en el foro de PHP en Foros del Web. Pues estoy haciendo un parseador de bbcode a html. El problema está cuando una etiqueta contiene a otras iguales que ella, por ejemplo [.quote=uno][.quote=dos]texto 2[/quote]texto ...
  #1 (permalink)  
Antiguo 05/04/2009, 16:06
 
Fecha de Ingreso: septiembre-2008
Mensajes: 29
Antigüedad: 16 años, 2 meses
Puntos: 0
BBcode, expresiones regulares y los quote

Pues estoy haciendo un parseador de bbcode a html.
El problema está cuando una etiqueta contiene a otras iguales que ella, por ejemplo
[.quote=uno][.quote=dos]texto 2[/quote]texto uno[./quote] [/.code]

Pues la expresión regular me coje desde el primer [.quote] hasta el primer [./quote] por lo que "texto uno[./quote]" queda fuera.
La idea sería que fuese remplazando desde dentro hacia fuera, y no de forma lineal.

Alguna idea?
  #2 (permalink)  
Antiguo 05/04/2009, 16:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: BBcode, expresiones regulares y los quote

en el manual de PHP, si lees

salen ejemplos, de como usar ciertas funciones... incluso, hay uno muy bueno, que sirve para etiquetas anidadas....


http://php.net/preg_replace_callback

Código PHP:
<?php
$input 
"plain[indent] deep[indent] deeper [/indent]deep [/indent]plain";

function 
parseTagsRecursive($input)
{

    
$regex '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';

    if (
is_array($input)) {
        
$input '<div style="margin-left: 10px">'.$input[1].'</div>';
    }

    return 
preg_replace_callback($regex'parseTagsRecursive'$input);
}

$output parseTagsRecursive($input);

echo 
$output;
?>
suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
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:16.