Ver Mensaje Individual
  #3 (permalink)  
Antiguo 19/06/2011, 14:09
okr_a
 
Fecha de Ingreso: junio-2011
Mensajes: 3
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Duda con Expresiones Regulares

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?