mira, en la pagina oficial de PHP justo en la parte donde se explica como funciona preg_replace_callback() también viene un ejemplo de bloques anidados (precisamente lo que necesitas)
Enlace:
http://www.php.net/manual/es/functio...e-callback.php
no te voy a decir donde viene, ni como implementarlo.... el ejemplo es claro, suerte!
mas bien, aquí pongo el código... haber si sale
Código PHP:
<?php
$entrada = "plano[indent] profundo[indent] más profundo [/indent]profundo [/indent]plano";
function procesarEtiquetasRecursivamente($entrada)
{
$regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';
if (is_array($entrada)) {
$entrada = '<div style="margin-left: 10px">'.$entrada[1].'</div>';
}
return preg_replace_callback($regex, 'procesarEtiquetasRecursivamente', $entrada);
}
$salida = procesarEtiquetasRecursivamente($entrada);
echo $salida;
?>