Manuel PHP
Précédent |  | Suivant

# preg_replace_callback

(PHP 4 >= 4.0.5, PHP 5)

preg_replace_callback -- Rechercher/remplacer avec une expression rationnelle et fonction de callback

## Description

mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit [, int &count]] )

Le comportement de preg_replace_callback() est presque identique à celui de preg_replace(), hormis le fait qu'à la place du paramètre `replacement`, il faut spécifier une fonction de callback `callback` qui sera appelée, avec les éléments trouvés en arguments. Cette fonction retourne alors la chaîne de remplacement. Reportez-vous à la documentation sur la fonction preg_replace() pour une description des autres paramètres.

Exemple 1. Exemple avec preg_replace_callback()

`<?php
// Ce texte était vrai en 2002
// nous voulons le mettre a jour pour 2003
$text = "Le premier avril est le 01/04/2002\n";
$text.= "Le dernier no&Icirc;l était le 25/12/2001\n";
// Fonction de callback
function next_year($matches)
{
// comme d'habitude : $matches[0] représente la valeur totale
// $matches[1] représente la première parenthèse capturante
return $matches[1].($matches[2]+1);
}
echo preg_replace_callback(
"|(\d{2}/\d{2}/)(\d{4})|",
"next_year",
$text);
// retourne ceci :
// Le premier avril est le 01/04/2003
// Le dernier no&Icirc;l était le 25/12/2002
?>`

Vous aurez souvent besoin de la fonction `callback` avec preg_replace_callback() à un seul endroit. Dans ce cas, vous pouvez simplement utiliser la fonction create_function() pour déclarer une fonction anonyme comme fonction de callback pour preg_replace_callback(). En faisant cela, vous concentrez toutes les routines liées à votre remplacement à un seul endroit, et nous ne polluez par votre espace de noms de fonctions avec des fonctions à usage unique.

Exemple 2. Exemples avec preg_replace_callback() et create_function()

`<?php
// Un filtre de ligne de commande Unix pour convertir les lettres
// en majuscule de début des paragraphe en minuscules
$fp = fopen("php://stdin", "r") or die("Impossible de lire la ligne de commande");
while (!feof($fp)) {
$line = fgets($fp);
$line = preg_replace_callback(
'|<p>\s*\w|',
create_function(
// Les guillemets simples sont très importants ici
// ou bien il faut protéger les caractères $ avec \$
'$matches',
'return strtolower($matches[0]);'
),
$line
);
echo $line;
}
fclose($fp);
?>`

Exemple 3. Exemple avec preg_replace_callback() en utilisant une structure récursive pour gérer du BB code

`<?php
$input = "plain [indent] deep [indent] deeper [/indent] deep [/indent] plain";
function parseTagsRecursive($input)
{
$regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';
if (is_array($input)) {
$input = '<div style="margin-left: 10px">'.$input[1].'</div>';
}
return preg_replace_callback($regex, 'parseTagsRecursive', $input);
}
$output = parseTagsRecursive($input);
echo $output;
?>`

Voir aussi preg_replace(), create_function(), et information à propos de callback type.

Précédent | Sommaire | Suivant
preg_quote | Niveau supérieur | preg_replace