7.89 Expressions régulières compatibles Perl
7 Index des fonctions
Manuel PHP
. Introduction . Pré-requis . Installation . Configuration à l'exécution . Types de ressources . Constantes prédefinies . Exemples . options de recherche . syntaxe des masques . preg_grep . preg_match_all . preg_match . preg_quote . preg_replace_callback ->preg_replace . preg_split
|
7.89.15 preg_replace()
Rechercher et remplacer par expression régulière standard
[ Exemples avec preg_replace ] PHP 3>= 3.0.9, PHP 4
mixed
preg_replace (
mixed
pattern
,
mixed
replacement
,
mixed
subject
,
int
limit
)
preg_replace
analyse
subject
pour trouver l'expression
pattern
et remplace les
résultats par
replacement
.
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.
Utilisation des références arrières avec des littéraux numériques |
<?php $string = "Avril 05, 2003"; $pattern = "/(\w+) (\d+), (\d+)/i"; $replacement = "\${1}1,\$3"; print preg_replace($pattern, $replacement, $string);
/* Output ======
Avril1,2003
*/ ?>
|
Si la recherche n'aboutit à aucun résultat,
subject
sera inchangé.
Tous les paramètres de
preg_replace
peuvent être des tableaux.
Note |
Lorsque vous utilisez des tableaux avec les paramètres
pattern
et
replacement
, 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érique. Si vous utilisez des index pour
identifier quel
pattern
doit être
replacée par quel
replacement
, il est
recommandé de faire un tri
ksort
sur chaque
tableau avant de faire appel à
preg_replace
.
|
Utilisation de tableaux indexé avec preg_replace |
<?php $string = "The quick brown fox jumped over the lazy dog.";
$patterns[0] = "/quick/"; $patterns[1] = "/brown/"; $patterns[2] = "/fox/";
$replacements[2] = "bear"; $replacements[1] = "black"; $replacements[0] = "slow";
print preg_replace($patterns, $replacements, $string);
/* Output ======
The bear black slow jumped over the lazy dog.
*/
/* By ksorting patterns and replacements, we should get what we wanted. */
ksort($patterns); ksort($replacements);
print preg_replace($patterns, $replacements, $string);
/* Output ======
The slow black bear jumped over the lazy dog.
*/
?>
|
Si
subject
est un tableau, alors l'opération
sera appliquée à chacun des éléments du
tableau, et le tableau sera retourné.
Si
pattern
et
replacement
sont des tableaux, alors
preg_replace
prend une valeur
de chaque tableau, et l'utilise pour faire la recherche et le remplacement.
Si
replacement
à moins d'éléments
que
pattern
, alors la chaîne vide est
utilisé pour le reste des valeurs. Si
pattern
est un tableau, et que
replacement
est une
chaîne, alors cette chaîne sera utilisée pour
chaque valeur de
pattern
.
Le contraire n'aurait pas de sens.
/e
force
preg_replace
à traiter
replacement
comme du
code PHP une fois que les substitutions adéquates ont
été faites. Conseil :assurez-vous que
replacement
est un code PHP valide, car sinon, PHP
trouvera une erreur d'analyse (parse error) dans cette ligne.
/F
indique que le paramètre
replacement
doit être considéré
comme un nom de fonction. Cette fonction sera appelée, avec un
tableau contenant les éléments trouvés comme
arguments. La fonctoin doit retourner la chaine de remplacement. Cette option
a été ajoutée en PHP 4.0.4.
Remplacement de plusieurs valeurs simultanément |
<?php $patterns = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/"); $replace = array ("\\3/\\4/\\1\\2", "$\\1 ="); print preg_replace ($patterns, $replace, "{startDate} = 1999-5-27"); ?>
|
Cet exemple va afficher :
$startDate = 5/27/1999
Utilisation de l'option /e |
<?php preg_replace("/(<\/?)(\w+)([^>]*>/e", "'\\1'.strtoupper('\\2').'\\3'", $html_body); ?>
|
Conversion HTML en texte |
<?php // $document contient un document HTML // Ce script va effacer les balises HTML, les javascript // et les espaces. Il remplace aussi quelques entités HTML // courante en leur équivalent texte. $search = array ("'<script[?>]*?>.*?</script>'si", // Supprime le javascript "'<[\/\!]*?[^<?>]*?>'si", // Supprime les balises HTML "'([\r\n])[\s]+'", // Supprime les espaces "'&(quot|#34);'i", // Supprime les entites HTML "'&(amp|#38);'i", "'&(lt|#60);'i", "'&(gt|#62);'i", "'&(nbsp|#160);'i", "'&(iexcl|#161);'i", "'&(cent|#162);'i", "'&(pound|#163);'i", "'&(copy|#169);'i", "'&#(\d+);'e"); // Evaluation comme PHP $replace = array ("", "", "\\1", "\"", "&", chr(169), "chr(\\1)"); $text = preg_replace ($search, $replace, $document); ?>
|
Note |
Le paramètre
limit
a été ajouté
à partir de PHP 4.0.1pl2.
|
Voir aussi
preg_match
,
preg_match_all
et
preg_split
.
|