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ía de los inocentes es 04/01/2002\n";
$texto.= "La ú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ía de los inocentes es 04/01/2003
// La ú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().