Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
807 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU]Boucle dans remplacement regex

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU]Boucle dans remplacement regex

n°1192409
Psykolio
Posté le 05-09-2005 à 16:41:44  profilanswer
 

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
mood
Publicité
Posté le 05-09-2005 à 16:41:44  profilanswer
 

n°1192424
omega2
Posté le 05-09-2005 à 16:52:53  profilanswer
 

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.

n°1192463
soju
One shot !
Posté le 05-09-2005 à 17:10:46  profilanswer
 

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)

n°1192476
omega2
Posté le 05-09-2005 à 17:21:35  profilanswer
 

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.

n°1192498
soju
One shot !
Posté le 05-09-2005 à 17:35:22  profilanswer
 

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

n°1192520
Psykolio
Posté le 05-09-2005 à 17:46:36  profilanswer
 

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!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU]Boucle dans remplacement regex

 

Sujets relatifs
[RESOLU] Excel : macro qui marche, mais boutton qui marche pas ![Win32] new / delete & DLL [résolu]
sens de [...] ? [résolu][Javascript] problème avec la regex search
[Résolu] Pb affichage lors de la mise en ligne[RESOLU] Date: mois-année, bien la galere... (excel)
Socket: Mesure d'upload et dowload [RESOLU]problème de session avec Easyphp [RESOLU]
comment faire une boucle "toutes les 3 secondes"?[ RESOLU ] Des bordures transparentes ?
Plus de sujets relatifs à : [RESOLU]Boucle dans remplacement regex


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR