preg_replace
(PHP 4, PHP 5)
preg_replace — Rechercher et remplacer par expression rationnelle standard
Description
$pattern
, mixed $replacement
, mixed $subject
[, int $limit
= -1
[, int &$count
]] )
Analyse subject
pour trouver l'expression
rationnelle pattern
et remplace les
résultats par replacement
.
Liste de paramètres
-
pattern
-
Le masque à chercher. Il peut être une chaîne ou un tableau de chaînes.
Plusieurs modificateurs PCRE sont également disponibles, incluant l'option obsolète 'e' (PREG_REPLACE_EVAL), qui est spécifique à cette fonction.
-
replacement
-
La chaîne ou un tableau de chaînes pour le remplacement. Si ce paramètre est une chaîne et le paramètre
pattern
est un tableau, tous les masques seront remplacés par cette chaîne. Si les paramètrespattern
etreplacement
sont des tableaux, chaquepattern
sera remplacé sonreplacement
associé. Sireplacement
à moins d'éléments quepattern
, alors une chaîne vide est utilisée pour le reste des valeurs. Pour utiliser les antislashs dans le masque, vous devez les doubler ("\\\\").replacement
peut contenir des références de la forme \\n ou, (depuis PHP 4.0.4) $n. Cette dernière forme est recommandée. Ces références seront remplacées par le texte capturé par la n-ième parenthèse capturante du masque. n peut prendre des valeurs de 0 à 99, et \\0 ou $0, correspondent au texte de qui satisfait le masque complet. Les parenthèses ouvrantes sont comptées de gauche à droite (en commençant à 1) pour déterminer le numéro de parenthèse capturante.Lorsque vous travaillez avec un masque de remplacement où une référence arrière est directement suivie par un nombre (i.e.: placer un nombre littéral immédiatement après une référence arrière), vous ne pouvez pas utiliser la syntaxe classique \\1 pour la référence arrière. \\11, par exemple, sera confus pour la fonction preg_replace() dans le sens où elle ne saura pas si vous désirez la référence arrière \\1 suivi du nombre 1 ou si vous désirez la référence arrière \\11 suivi de "rien". Dans ce cas, la solution est d'utiliser la syntaxe \${1}1. Cela créera une référence arrière isolée $1, suivi du nombre littéral 1.
Lorsque vous utilisez l'option obsolète e, cette fonction échappe quelques caractères (', ", \ et NULL) dans la chaîne qui remplace les références arrières. Ce comportement se justifie afin d'assurer qu'aucune erreur de syntaxe ne survient lors de l'utilisation des références arrières avec des guillemets simples et doubles (e.g. 'strlen(\'$1\')+strlen("$2")'). Assurez-vous d'être familier avec la syntaxe des chaînes afin de savoir exactement à quoi la chaîne interprétée doit ressembler.
-
subject
-
La chaîne ou le tableau contenant des chaînes à chercher et à remplacer.
Si
subject
est un tableau, alors l'opération sera appliquée à chacun des éléments du tableau, et le tableau sera retourné. -
limit
-
Le nombre maximal de remplacement pour chaque masque dans chaque chaîne
subject
. Par défaut, vaut -1 (aucune limite). -
count
-
Si fournie, cette variable contiendra le nombre de remplacements effectués.
Valeurs de retour
preg_replace() retourne un tableau si le paramètre
subject
est un tableau, ou une chaîne sinon.
Si des correspondances sont trouvées, le nouveau
subject
sera retourné, sinon
subject
sera retourné à l'identique, ou NULL
si une erreur survient.
Erreurs / Exceptions
Une alerte de niveau E_DEPRECATED
est émise
lorsque vous utilisez l'option "\e".
Historique
Version | Description |
---|---|
5.5.0 | Le modificateur /e est obsolète. Utilisez la fonction preg_replace_callback() à la place. Voir la documentation sur PREG_REPLACE_EVAL pour plus d'informations quant aux risques de sécurité. |
5.1.0 |
Ajout du paramètre count
|
4.0.4 |
Ajout de la forme '$n' pour le paramètre replacement
|
4.0.1 |
Ajout du paramètre limit
|
Exemples
Exemple #1 Utilisation des références arrières avec des littéraux numériques
<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>
<?php
$string = 'Le renard marron agile saute par dessus le chien paresseux.';
$patterns = array();
$patterns[0] = '/agile/';
$patterns[1] = '/marron/';
$patterns[2] = '/renard/';
$replacements = array();
$replacements[2] = 'grizzly';
$replacements[1] = 'brun';
$replacements[0] = 'lent';
echo preg_replace($patterns, $replacements, $string);
?>
<?php ksort($patterns); ksort($replacements); echo preg_replace($patterns, $replacements, $string); ?>
<?php
$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',
'/^\s*{(\w+)}\s*=/');
$replace = array ('\3/\4/\1\2', '$\1 =');
echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27');
?>
<?php
$str = 'foo o';
$str = preg_replace('/\s\s+/', ' ', $str);
// Affichera 'foo o'
echo $str;
?>
Exemple #5 Utilisation du paramètre count
<?php
$count = 0;
echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count);
echo $count; //3
?>
L'exemple ci-dessus va afficher :
xp***to 3
Notes
Note:
Lorsque vous utilisez des tableaux avec les paramètres
pattern
etreplacement
, les clés sont traitées dans l'ordre dans lequel elles apparaissent dans le tableau. Ce n'est pas forcément la même chose que l'ordre des index numériques. Si vous utilisez des index pour identifier quelpattern
doit être replacé par quelreplacement
, il est recommandé de faire un tri ksort() sur chaque tableau avant de faire appel à preg_replace().
Voir aussi
- Les Patterns PCRE
- preg_filter() - Recherche et remplace avec une expression rationnelle
- preg_match() - Expression rationnelle standard
- preg_replace_callback() - Rechercher et remplacer par expression rationnelle standard en utilisant une fonction de callback
- preg_split() - Éclate une chaîne par expression rationnelle
- preg_last_error() - Retourne le code erreur de la dernière expression PCRE exécutée