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] )
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.
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Î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Î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); ?>
|
|
Voir aussi
preg_replace() et
create_function().