Expressions régulières et replace

Eléphanteau du PHP | 14 Messages

06 nov. 2006, 00:20

salut à tous :D

je cherche à comprendre comment fonctionnent les expressions régulières, mais j'ai vraiment du mal ... une ligne comme celle-ci plante, et me dit "Invalide quantifier ?:)" :

Code : Tout sélectionner

html = html.replace(/(:???:)/g, '<img src="images/smiles/icon_confused.gif" border="0" />');
ce que je veux, c'est remplacer ":???:" par le code "<img ...". en fait, je voudrais même un replace qui n'utilise pas les expressions régulières, ça me sert pas dans ce cas là ...

quelqu'un a une idée ?

Mammouth du PHP | 19672 Messages

06 nov. 2006, 08:23

Le "?" est un caractère réservé des expressions régulière. Pour l'utiliser littéralement, il faut l'échapper. Essaye avec :

Code : Tout sélectionner

html = html.replace(/(:\?\?\?:)/g, '<img src="images/smiles/icon_confused.gif" border="0" />');
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 14 Messages

06 nov. 2006, 10:22

oki merci :wink:

finalement je me suis fait une fonction qui fait un remplacement de toutes les occurences, et qui ne prend pas les expressions régulières :?

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

06 nov. 2006, 12:26

Dans un cas simple comme celui-là, tu avais avantage à ne pas passer une expression régulière /\?\?\?/g, auquel cas la méthode String.prototype.replace() de Javascript se comporte comme preg_replace() de PHP, mais plutôt une simple chaîne et elle se comporte alors comme str_replace() de PHP.

Eléphanteau du PHP | 14 Messages

06 nov. 2006, 12:38

le problème, c'est que si je ne passais pas d'expression régulière avec g à la fin, je n'avais pas toutes les occurences de ma chaine qui étaient remplacées :?