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.
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 |
Plutôt que de remplacer par '***', on pourrait remplacer par une
image :
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.
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.
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).
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 ...