(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
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 .
El patrón a buscar. Puede ser una cadena o una matriz con cadenas.
Una llamada de retorno que será usada pasándole una matriz de los elementos coincidentes en asunto . La llamada de retorno debería devolver la cadena de reemplazo.
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.
Example#1 preg_replace_callback() y create_function()
<?php
/* un filtro de línea de comandos tipo Unix para convertir letras
* mayúsculas al comienzo de los parágrafos a minúsculas */
$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 aquí,
// o alternativamente escapar todos los signos $ como \$
'$coincidencias',
'return strtolower($coincidencias[0]);'
),
$linea
);
echo $linea;
}
fclose($da);
?>
La cadena o una matriz con cadenas para buscar y reemplazar.
La cantidad máxima posible de reemplazos para cada patrón en cada cadena asunto . Su valor predeterminado es -1 (sin límite).
Si se especifica, esta variables será llenada con el número de reemplazos realizados.
preg_replace_callback() devuelve una matriz si el parámetro asunto es una matriz, o una cadena de lo contrario.
Si se encuentran coincidencias, el nuevo asunto será devuelto, de otra forma asunto será devuelto intacto.
Versión | Descripción |
---|---|
5.1.0 | El parámetro conteo fue agregado |
Example#2 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 subpatrón
// ubicado entre '(...)' y así sucesivamente
return $coincidencias[1].($coincidencias[2]+1);
}
echo preg_replace_callback(
"|(\d{2}/\d{2}/)(\d{4})|",
"siguiente_anyo",
$texto);
?>
El resultado del ejemplo seria:
El día de los inocentes es 04/01/2003 La última navidad fue 12/24/2002
Example#3 preg_replace_callback() usando una estructura recursiva para manejar código BB encapsulado
<?php
$entrada = "plano [indent] profundo [indent] más profundo [/indent] profundo [/indent] plano";
function procesarEtiquetasRecursivamente($entrada)
{
$regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';
if (is_array($entrada)) {
$entrada = '<div style="margin-left: 10px">'.$entrada[1].'</div>';
}
return preg_replace_callback($regex, 'procesarEtiquetasRecursivamente', $entrada);
}
$salida = procesarEtiquetasRecursivamente($entrada);
echo $salida;
?>