preg_replace_callback

(PHP 4 >= 4.0.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().