preg_replace_callback

(PHP 4 >= 4.0.5, PHP 5)

preg_replace_callback -- Realizar una búsqueda con expresiones regulares y generar reemplazos usando una llamada de retorno

Descripción

mixed preg_replace_callback ( mixed patron, callback llamada_de_retorno, mixed fuente [, int limite])

El comportamiento de esta función es casi idéntico al de preg_replace(), con la excepción de que en lugar del parámetro reemplazo, uno debe especificar una llamada_de_retorno que será usada pasándole una matriz de los elementos coincidentes en la cadena fuente. La llamada de retorno debería devolver la cadena de reemplazo.

Ejemplo 1. Ejemplo de preg_replace_callback()

<?php
  
// este texto fue usado en 2002
  // queremos actualizarlo para 2003

  
$texto = "El d&iacute;a de los inocentes es 04/01/2002\n";  
  
$texto.= "La &uacute;ltima navidad fue 12/24/2001\n";  
  

  
// la llamada de retorno

  
function siguiente_anyo($coincidencias)
  {
    
// como es usual: $coincidencias[0] es la coincidencia completa
    // $coincidencias[1] la coincidencia para el primer subpatron
    // ubicado entre '(...)' y asi sucesivamente

    
return $coincidencias[1].($coincidencias[2]+1);
  }

  echo
preg_replace_callback(
              
"|(\d{2}/\d{2}/)(\d{4})|",
              
"siguiente_anyo",
              
$texto);

  
// el resultado es:
  // El d&iacute;a de los inocentes es 04/01/2003
  // La &uacute;ltima navidad fue 12/24/2002
?>

Con frecuencia necesitará la función de llamada de retorno cuando use preg_replace_callback() únicamente en un lugar. En este caso, usted puede usar create_function() para declarar una función anónima como llamada de retorno dentro del llamado a preg_replace_callback(). Al hacerlo de este modo, usted tendrá toda la información necesaria para el llamado en un solo lugar y no abarrota su espacio de nombres de funciones con nombres de llamadas de retorno que no son usadas en ninguna otra parte.

Ejemplo 2. preg_replace_callback() y create_function()

<?php
  
/* un filtro de linea de comandos tipo Unix para convertir letras
   * mayusculas al comienzo de los paragrafos a minusculas */

$da = fopen("php://stdin", "r") or die("no se puede leer stdin");

while (!
feof($da)) {
    
$linea = fgets($da);
    
$linea = preg_replace_callback(
        
'|<p>\s*\w|',
        
create_function(
            
// las comillas sencillas son cruciales aqui,
            // o alternativamente escapar todos los signos $ como \$
            
'$coincidencias',
            
'return strtolower($coincidencias[0]);'
            
),
        
$linea
        
);
    echo
$linea;
}
fclose($da);

?>

Vea también preg_replace() y create_function().