preg_replace_callback
(PHP 4 >= 4.0.5, PHP 5, PHP 7, PHP 8)
preg_replace_callback — Rechercher et remplacer par expression rationnelle standard en utilisant une fonction de callback
Liste de paramètres
pattern
-
Le masque à chercher. Il peut être une chaîne de caractères ou un tableau contenant
des chaînes.
callback
-
La fonction de rappel qui recevra le tableau d'éléments
trouvés dans la chaîne subject.
La fonction de rappel doit retourner la chaîne de
remplacement. Voici la signature de la fonction de rappel :
Vous aurez souvent besoin de la fonction callback
avec preg_replace_callback() à un seul endroit.
Dans ce cas, vous pouvez simplement utiliser une
fonction anonyme
pour déclarer une fonction de rappel pour la fonction
preg_replace_callback().
En faisant cela, vous concentrez toutes les routines liées à
votre remplacement à un seul endroit, et vous ne polluez pas
votre espace de noms de fonctions avec des fonctions à usage unique.
Exemple #1 preg_replace_callback() et
fonction anonyme
<?php
// Un filtre de ligne de commande Unix pour convertir la première lettre
// des paragraphes (commençant par "<p>") en minuscule
$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|',
function ($matches) {
return strtolower($matches[0]);
},
$line
);
echo $line;
}
fclose($fp);
?>
subject
-
La chaîne ou le tableau de chaînes à chercher et à remplacer.
limit
-
Le nombre maximal de remplacement pour chaque masque
dans chaque chaîne subject.
Vaut par défaut -1 (aucune limite).
count
-
Si fournie, cette variable sera remplie avec le nombre de remplacements effectués.
flags
-
flags peut être une combinaison des drapeaux
PREG_OFFSET_CAPTURE et
PREG_UNMATCHED_AS_NULL, qui influence le format
du tableau de correspondances.
Voir la description de preg_match() pour plus de détail.
Valeurs de retour
preg_replace_callback() retourne un tableau si le paramètre
subject est un tableau, ou, sinon, une chaîne de caractères.
Si une erreur survient, la valeur retournée sera null.
Si des correspondances sont trouvées, le nouveau sujet sera retourné, sinon
subject sera retourné inchangé.
Erreurs / Exceptions
Si le masque regex passé ne compile pas à une regex valide, une E_WARNING est émise.
Exemples
Exemple #2 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 04/01/2002\n";
$text.= "Le dernier noël était le 12/24/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);
?>
L'exemple ci-dessus va afficher :
Le premier avril est le 04/01/2003
Le dernier noël était le 12/24/2002
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;
?>