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
callbackavec 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
