PHP – Analizador de BBCode – recursivo con regex y preg_replace

Estoy haciendo mi propio analizador de bbcode, y tengo un problema cuando trato de hacer la cita recursiva.

este es mi código:

function forumBBCode($str){ $format_search=array( '#\[quote=(.*?)\](.*?)\[/quote\]#is' ); $format_replace=array( '
$1 wrote :
$2
' ); $str=preg_replace($format_search, $format_replace, $str); $str=nl2br($str); return $str; }

¿Qué debo agregar / editar para hacer una cita recursiva? en otras palabras, cuando hay una cita dentro de otra cita …

vítores y tnx por la ayuda

Vea aquí: Patrones recursivos en el manual de PHP.

Esto también puede interesarle, aunque es más un tecnicismo: ¿por qué la expresión recursiva no es regex?

Esta es una Q antigua pero publicaré mi solución de todos modos para ppl =]

 $open = '
Quote:
'; //the next few lines do the parsing for quote blocks. We $close = '
'; //have to do it outside the normal parsing arrays because that way does not allow nesting. preg_match_all ('/\[quote\]/i', $str, $matches); $opentags = count($matches['0']); preg_match_all ('/\[\/quote\]/i', $str, $matches); $closetags = count($matches['0']); $unclosed = $opentags - $closetags; for ($i = 0; $i < $unclosed; $i++) { $str .= ''; } //Do Quotes (nested) $str = str_replace ('[quote]', $open, $str); $str = preg_replace('/\[quote\=(.*?)\]/is','
Quote: $1
', $str); $str = str_replace ('[/quote]', $close, $str); return $str;

Paz.