Forum und email

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 $asunto [, int $limite [, int &$conteo ]] )

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 .

Lista de parámetros

patron

El patrón a buscar. Puede ser una cadena o una matriz con cadenas.

llamada_de_retorno

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);
?>

asunto

La cadena o una matriz con cadenas para buscar y reemplazar.

limite

La cantidad máxima posible de reemplazos para cada patrón en cada cadena asunto . Su valor predeterminado es -1 (sin límite).

conteo

Si se especifica, esta variables será llenada con el número de reemplazos realizados.

Valores retornados

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.

Registro de cambios

Versión Descripción
5.1.0 El parámetro conteo fue agregado

Ejemplos

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;
?>

Ver también