preg_replace_callback
(PHP 4 >= 4.0.5, PHP 5)
preg_replace_callback — Rechercher et remplacer par expression rationnelle standard en utilisant une fonction de callback
Description
$pattern
, callable $callback
, mixed $subject
[, int $limit
= -1
[, 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 rappel callback
qui sera appelée, avec les éléments trouvés en arguments.
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 :string handler ( array$matches
)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 (depuis PHP 5.3.0) ou la fonction create_function() pour déclarer une fonction anonyme comme fonction de rappel 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 #1 preg_replace_callback() et fonction anonyme
<?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|', 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.
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 le paramètre subject
sera retourné,
inchangé.
Historique
Version | Description |
---|---|
5.1.0 |
Le paramètre count a été ajouté.
|
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);
?>
<?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
- Les Patterns PCRE
- preg_replace() - Rechercher et remplacer par expression rationnelle standard
- preg_last_error() - Retourne le code erreur de la dernière expression PCRE exécutée
- create_function() - Crée une fonction anonyme
- Les fonctions anonymes
- Informations sur le type callback