(PHP 4 >= 4.0.5, PHP 5)
preg_replace_callback — Rechercher et remplacer par expression rationnelle standard en utilisant une fonction de callback
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.
Le masque à chercher. Il peut être une chaîne de caractères ou un tableau contenant des chaînes.
Une fonction de callback qui sera appelé et passerz un tableau d'éléments correspondants trouvés dans la chaîne subject . La fonction de callback doit retourner la chaîne de remplacement.
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 1890. 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
);
?>
La chaîne ou le tableau de chaînes à chercher et à remplacer.
Le nombre maximal de remplacement pour chaque masque dans chaque chaîne subject . Vaut par défaut -1 (aucune limite).
Si fournie, cette variable sera remplie avec le nombre de remplacements effectués.
preg_replace_callback() retourne un tableau si le paramètre subject est un tableau, ou, sinon, une chaîne de caractères .
Si des correspondances sont trouvées, le nouveau sujet sera retourné, sinon subject sera retourné, inchangé.
Version | Description |
---|---|
5.1.0 | Le paramètre count a été ajouté. |
Exemple 1891. 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 1892. 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
;
?>
preg_replace() |
create_function() |
information à propos de callback type |