Muchas gracias Triby!!! la verdad que sí, puedo aprovechar el preg_matches_all para hacer otro ciclo... Probé lo que me dijiste, pero no puedo usar el $match del foreach como patrón para el preg_replace (me da error porque no es un string)...
Entonces probé esto:
Código PHP:
function reemplaza_botonera($array_links){
global $plantilla;
$patron = "~\{Botonera:(.*?)\}(.*?)\{:Botonera\}~s";
preg_match_all($patron, $plantilla, $matches, PREG_SET_ORDER);
foreach($matches as $match){
$patron = "~\{Botonera:$match[1]\}(.*?)\{:Botonera\}~s";
preg_match_all($patron, $plantilla, $submatches, PREG_SET_ORDER);
$reemplazo = '';
if($array_links){
foreach($array_links as $link){
$subpatron = array("{Botonera_url}", "{Botonera_tag}");
$subreemplazo = array($link['url'], $link['tag']);
$reemplazo .= str_replace($subpatron, $subreemplazo, $submatches[0][1]);
}
}
$plantilla = preg_replace($patron, $reemplazo, $plantilla);
}
}
Esto CASI resuelve el problema, pero en realidad para hacerlo funcionar, estoy generando un nuevo patrón con el resultado del match, ya que identifiqué a las dos botoneras, de esta forma:
Código:
<div id="botonera1">
{Botonera:UNO}
<a href="{Botonera_url}">{Botonera_tag}</a>
{:Botonera}
</div>
<ul id="botonera2">
{Botonera:DOS}
<li><a href="{Botonera_url}">{Botonera_tag}</a></li>
{:Botonera}
</ul>
Y quisiera resolver esto sin tener que identificar las botoneras, sino con el código que puse primero... Se entiende?