[PHP]Pb: Remplacer 1 variable par 1 mot avec RegEx

Pb: Remplacer 1 variable par 1 mot avec RegEx [PHP] - PHP - Programmation

Marsh Posté le 26-01-2007 à 09:57:07    

Salut,
 
Je cherche, en PHP, à remplacer la première occurrence d'un mot par un autre mot. De plus, je souhaite que le mot en question ne soit remplac é que si c'est un mot à part entière, et non pas une partie d'un mot.
 
La première implémentation m'étant venue à l'esprit fut donc:
 

Code :
  1. function replaceWholeWordOnce($search, $replace, $subject){
  2. return preg_replace("/^(.*?)\b" . $search . "\b(.*)$/", "$1$replace$2", $subject);
  3. }


 
Cependant, je me suis vite rendu compte que si ^search contenait un caractère spécial au vu des RegEx du genre '(', alors, ça ne marchait pas.
 
Est ce à dire que je dois échapper, dans $search, chacun de ces caractères spéciaux, et donc avoir une implémentation de la forme:
 

Code :
  1. function replaceWholeWordOnce($search, $replace, $subject){
  2. $search=str_replace(array('\\', '/', '^', '.', '[', ']', '|', '(', ')', '?', '*', '+', '{', '}'), array('\\\\', '\\/', '\\^', '\\.', '\\[', '\\]', '\\|', '\\(', '\\)', '\\?', '\\*', '\\+', '\\{', '\\}'), $search);
  3. return preg_replace("/^(.*?)\b" . $search . "\b(.*)$/", "$1$replace$2", $subject);
  4. }


 
Ca me paraît bien lourd quand même.
Est ce qu'il n'y aurait pas un moyen raccourci (et accessoirement plus fiable) de faire ça?
 
Merci.

Reply

Marsh Posté le 26-01-2007 à 09:57:07   

Reply

Marsh Posté le 26-01-2007 à 10:11:29    

Reply

Marsh Posté le 26-01-2007 à 10:17:42    

Merci beaucoup!
 
Effectivement, ça me rassure.
 
Par contre, je vois que preg_quote échappe beaucoup plus de caractères que moi.
 
Quelle est par exemple l'utilité d'échapper = ou < ?

Reply

Marsh Posté le 26-01-2007 à 10:20:45    

c'est utiliser dans les assertions en PCRE.

Reply

Marsh Posté le 26-01-2007 à 10:25:50    

Effectivement, je les avais oubliées celles-là...
 
Donc, mon code aurait de plus été déficient...ouf!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed