C'est la fonction preg_replace() qui permet de rechercher un modèle et de le remplacer par la chaîne de notre choix. La fonction prend en premier paramètre l'expression régulière, en deuxième la chaîne de remplacement et en troisième la chaîne à examiner.

### Remplacement simple

Imaginons que nous avons développé un forum sur lequel nous voulons que les messages restent corrects. Nous pouvons utiliser les expressions régulières pour remplacer certains mots que nous jugeons "déplacés".
Nous commencerons par le mot 'con'. Nous voulons remplacer 'con' par '***' dans les expressions comme 't'es un con, un connard', 'vous êtes des cons, des connards', mais pas dans 'je suis content' ou dans 'c'est trop abscon'. L'expression régulière est la suivante :
/\bcon(nard)*?s*?\b/i

\b | limite de mot
con | la chaîne littérale con
(nard)*? | la chaîne littérale nard 0 ou plusieurs fois
s*? | la chaîne littérale s, 0 ou plusieurs fois
\b | limite de mot

Exemple : remplacement
<?php require('bib_fonctions.php'); htmlDebut('Remplacement'); $txt = "T'es vraiment trop con. T'es un sale connard. Vous êtes tous des cons bande de connards et je suis trop content de vous le dire."; $exp = '/\bcon(nard)*?s*?\b/i'; $txt = preg_replace($exp, '***', $txt); echo $txt; htmlFin(); ?>

Plutôt que de remplacer par '***', on pourrait remplacer par une image :

Exemple : remplacement
<?php require('bib_fonctions.php'); htmlDebut('Remplacement'); $txt = "T'es vraiment trop con. T'es un sale connard. Vous êtes tous des cons bande de connards et je suis trop content de vous le dire."; $exp = '/\bcon(nard)*?s*?\b/i'; $txt = preg_replace($exp, '<img src="../phpimg/bulle.gif">', $txt); echo $txt; htmlFin(); ?>

### Limiter les remplacements

Par defaut, la fonction preg_replace() remplace toutes les occurences qu'elle trouve. Nous pouvons utiliser un quatrième paramètre qui définira le nombre maximum de remplacements à faire.

L'exemple suivant limite le remplacement des cons (vaste programme) aux 2 premiers.

Exemple : remplacement limité
<?php require('bib_fonctions.php'); htmlDebut('Remplacement limité'); $txt = "T'es vraiment trop con. T'es un sale connard. Vous êtes tous des cons bande de connards et je suis trop content de vous le dire."; $exp = '/\bcon(nard)*?s*?\b/i'; $txt = preg_replace($exp, '***', $txt, 2); echo $txt; htmlFin(); ?>

### Remplacement par tableaux

La langue française (comme toutes les autres) est très riche en mots injurieux. Si on voulait vérifier aussi salop(e, ard), fuck, Dark Vador et palsambleu devrait-on avoir autant de fonctions preg_replace() que de mots ? Et bien non car la fonction accepte comme premier argument un tableau d'expressions régulières.

Exemple : remplacement
<?php require('bib_fonctions.php'); htmlDebut('Remplacement'); $txt = "Palsambleu, ce prof est vraiment trop con. C'est un salopard qui fait des examens trop difficiles. Et fuck Dark Vador."; $exp = array(); $exp[] = '/\bcon(nard)*?s*?\b/i'; $exp[] = '/salop.*?\b/i'; $exp[] = '/fuck/i'; $exp[] = '/Dark\s*?Vador/i'; $txt = preg_replace($exp, '<img src="../phpimg/bulle.gif">', $txt); echo $txt; htmlFin(); ?>

Le deuxième argument de la fonction preg_replace() peut aussi être un tableau. L'élément 0 du premier tableau sera remplacé par l'élément 0 du second tableau, l'élément 1 du premier tableau par l'élément 1 du second tableau, etc. Si le deuxième tableau à moins d'éléments que le premier, les éléments sont remplacés par une chaîne vide (ils sont supprimés).

Exemple : remplacement
<?php require('bib_fonctions.php'); htmlDebut('Remplacement'); $txt = "Palsambleu, ce prof est vraiment trop con. C'est un salopard qui fait des examens trop difficiles. Et fuck Dark Vador."; $exp = array(); $exp[] = '/\bcon(nard)*?s*?\b/i'; $exp[] = '/salop.*?\b/i'; $exp[] = '/fuck/i'; $exp[] = '/Dark\s*?Vador/i'; $t = array(); $t[] = '****'; $t[] = '<img src="../phpimg/oh.gif">'; $t[] = '<img src="../phpimg/bulle.gif">'; $t[] = 'XXXX'; $txt = preg_replace($exp, $t, $txt); echo $txt; htmlFin(); ?>

La fonction preg_replace() peut être utilisée pour supprimer les éléments trouvés : il suffit de les remplacer par une chaîne vide. Si on reprend l'exemple des messages sur un forum, certains sont mal sécurisés et laissent la possibilité d'insérer du code JavaScript dans le texte, code qui sera interprété par le navigateur au moment de la lecture. Pour supprimer tout le code JavaScript qu'on pourrait avoir dans un texte, on peut utiliser l'expression suivante :
/<\s*?script.*?<\s*?\/\s*?script\s*?>/i

Démonstration ...

Exemple : remplacement
<?php require('bib_fonctions.php'); htmlDebut('Remplacement'); $txt = "Bonjour <script>alert('ah ah')</script> tout le monde"; htmlInfo('Affichage de la chaîne avant traitement'); echo $txt; $exp = '/<\s*?script.*?<\s*?\/\s*?script\s*?>/i'; $txt = preg_replace($exp, '', $txt); htmlInfo('Affichage de la chaîne après traitement'); echo $txt; htmlFin(); ?>