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