[RESOLU]Boucle dans remplacement regex

Boucle dans remplacement regex [RESOLU] - PHP - Programmation

Marsh Posté le 05-09-2005 à 16:41:44    

Hello, j'aurais besoin d'aide au sujet d'une fonction de remplacement d'un motif d'une expression régulière...
 
en fait, mon but est de faire une boucle me permettant de récupérer les variables $1,$2... à chaque fois que le remplacement est fait.
 
exemple: j'ai une regex "!gnagna([0-9]*)paf! bon, à chaque fois que je veux remplacer mon motif donné par la regex, je veux utiliser le $1 (donc le nombre désigné par [0-9]*) afin de définir par quoi je vais remplacer le motif en passant par une fonction
 
ça donnerait un truc du genre:
 
 

Code :
  1. //ma fonction quoi définit la valeur de replacement à partir de la variable du regex
  2. function quoi($nombre){//$nombre=$1 du regex
  3. $result="";//$result= valeur de remplacement
  4. for($i=0;$i<$nombre;$i++){
  5.    $result.="chaine ";
  6.    }
  7. return $result;
  8. }
  9. //à chaque fois qu'on trouve le motif !gnagna([0-9]*)paf! dans $texte
  10. while($motif=cherche("!gnagna([0-9]*)paf!U",$texte)){
  11.   $valeur_remplace=quoi($1);//on définit la valeur de remplacement à partir de $1
  12.   //et on remplace le motif dont on s'occupe par la valeur de remplacement
  13.   $motif=$motif.$valeur_remplace;
  14.   }


 
j'ai une idée de la méthode mais je ne sais pas quelles fonctions utiliser  :??:  
 
merci de m'aider!!


Message édité par Psykolio le 05-09-2005 à 21:53:43
Reply

Marsh Posté le 05-09-2005 à 16:41:44   

Reply

Marsh Posté le 05-09-2005 à 16:52:53    

Extrait de la doc de PHP :

Citation :

preg_grep retourne un tableau qui contient les éléments de input qui satisfont le masque pattern .


http://www.nexen.net/docs/php/anno [...] g-grep.php
 
Il me semblait qu'il y avait une fonction permettant de demander le résultat du remplacement à une fonction, mais je dois confondre avec une autre vu que je ne la retrouve pas.

Reply

Marsh Posté le 05-09-2005 à 17:10:46    

utilise l'option de recherche e ( voir doc http://php.net/manual/fr/reference [...] ifiers.php )
de cette façon tu pourras utiliser une fonction pour remplacer $1
(attention cette option a été la cause de plusieurs failles de sécurité dans phpbb)

Reply

Marsh Posté le 05-09-2005 à 17:21:35    

Si je pige bien cette option, il fait le remplacement puis exécute le résultat comme du code php. :o Si c'est ça, c'est super dangereux en effet.
J'espéres me tromper mais c'est ce que j'ai compris de leur explication.

Reply

Marsh Posté le 05-09-2005 à 17:35:22    

dangereux si mal utilisé, mais vraiment pratique dans certains cas.

Reply

Marsh Posté le 05-09-2005 à 17:46:36    

yopi, merci pour les idées!
 
j'ai trouvé une fonction qui convient sans devoir passer par l'option de recherche e
c'est la fonction preg_replace_callback()... elle exécute une fonction php sur les paramètres de la recherche à chaque remplacement...
 
le code devient:

Code :
  1. function quoi($param){
  2. $nombre=$param[1];//variable $1
  3. $result=$param[0];//on insère le motif complet
  4. for($i=0;$i<$nombre;$i++) $result.="chaine";
  5. return $result;
  6. }
  7. $texte=preg_replace_callback("!gnagna([0-9]*)paf!U","quoi",$texte);


 
et voili, c'est exactement ce qu'il fallait :)  
 
encore merci pour votre aide!!

Reply

Sujets relatifs:

Leave a Replay

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