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

  FORUM HardWare.fr
  Programmation
  PHP

  [Resolu] Regex : Variable et incrementation dans le replace

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu] Regex : Variable et incrementation dans le replace

n°2104249
spaik21
Posté le 01-10-2011 à 14:30:30  profilanswer
 

Bonjour tout le monde !
 
je planche sur un petit problème depuis hier soir, je m'explique : avec ma regex, je cherche a conserver uniquement les caractères se trouvant entre 2 parenthèse, et les utiliser dans une requêtes sql. Jusque la aucun problème, la ou ça se complique c'est au remplacement. En effet, j'aimerais qu'a la suite des caractères entre parenthèses se "greffe" une variable qui s’incrémente après chaque affichage de caractère entre parenthèse.
 
Concrètement :
 

Code :
  1. <?php
  2. $compteur=1;
  3. $texte='La Fluctuation de l’ouvre-boîte électrique (The Electric Can Opener Fluctuation)
  4.     Le Grillon des champs (The Jiminy Conjecture)
  5.     La Déviation Gothowitz (The Gothowitz Deviation)
  6.     La Solution pirate (The Pirate Solution)
  7.     Le Tournoi de cartes (The Creepy Candy Coating Corollary)';
  8. $texte = preg_replace('#(.+)\((.+)\)#', 'UPDATE `bdd`.`serie` SET `titre_episode` = \'$2\' WHERE `serie`.`id` ='.$compteur++.';<br />', $texte);
  9. echo($texte);
  10. ?>


 
le problème c'est que je n'ai pas d’incrémentation... le résultat est celui ci :
 

Code :
  1. UPDATE `bdd`.`serie` SET `titre_episode` = 'The Electric Can Opener Fluctuation' WHERE `serie`.`id` =1;
  2. UPDATE `bdd`.`serie` SET `titre_episode` = 'The Jiminy Conjecture' WHERE `serie`.`id` =1;
  3. UPDATE `bdd`.`serie` SET `titre_episode` = 'The Gothowitz Deviation' WHERE `serie`.`id` =1;
  4. UPDATE `bdd`.`serie` SET `titre_episode` = 'The Pirate Solution' WHERE `serie`.`id` =1;
  5. UPDATE `bdd`.`serie` SET `titre_episode` = 'The Creepy Candy Coating Corollary' WHERE `serie`.`id` =1;


 
J'ai essayé beaucoup de truc comme mettre ma variable dans la chaine de caractère, et ça marche, mais le but de ce script est de pouvoir traiter des données massivement ce qui n'est pas possible si je dois copier/coller ma variable moi même à chaque ligne. La chaine de caractère vient de wikipedia, ce sont les titres des épisodes de la serie the big bang theory dans cet exemple. J'aimerais pouvoir traiter des centaines de lignes d'un coup de cette manière.
En gros c'est un script de fainéant  :sleep: mais bon en même temps vla le boulot si je fais pas ça.
Je vous remercie d'avance pou vos lumières.
 
EDIT : J'ai trouvé ma solution, je travaille dessus et je poste le résultat.
 
Bon j'ai trouvé ma solution, j'ai utilisé la boucle foreach que je ne connaissais pas. Maintenant je galère avec mon expression régulière  :fou: .
 
Voila donc ce que ca donne maintenant :
 

Code :
  1. <?php
  2. $texte="Première saison (2005-2006)[modifier]
  3. Article détaillé : Saison 1 de How I Met Your Mother.
  4.     Un signe (Pilot)
  5.     Je te présente Ted (Purple Giraffe)
  6.     Un goût de liberté (Sweet Taste of Liberty)
  7.     Retour de flamme (Return of the Shirt)
  8.     La Soirée dégustation (Okay Awesome)";
  9. $texte = addslashes($texte);
  10. preg_match_all('#(.+)\((.+)\)#',$texte,$out, PREG_PATTERN_ORDER);
  11. $id_depart=115;
  12. foreach($out[2] as $line)
  13. {
  14. echo 'UPDATE `bdd`.`serie` SET `titre_episode` = \'';
  15. echo $line;
  16. echo '\' WHERE `serie`.`id` =';
  17. echo $id_depart;
  18. echo ';<br />';
  19. $id_depart++;
  20. }
  21. ?>


 
avec mon expression régulière, la boucle affiche "(2005-2006)"
 
ça fait bientôt 1h que je cherche mais j'y arrive pas :s.
Je pensais qu'avec ça ça marcherait mais non :

Code :
  1. #(.+)\((^[^0-9][^0-9]+[^-][^0-9]+)\)#


 
j'ai essayé plein de truc mais au final ça m'affiche plus rien.
je vous remercie d'avance.


Message édité par spaik21 le 03-10-2011 à 22:38:15
mood
Publicité
Posté le 01-10-2011 à 14:30:30  profilanswer
 

n°2104300
CyberDenix
Posté le 02-10-2011 à 07:10:45  profilanswer
 

Tu as besoin d'une fonction de callback.
 
Il te faut donc utiliser preg_replace_callback()
http://php.net/manual/en/function. [...] llback.php


---------------
Directeur Technique (CTO)
n°2104343
spaik21
Posté le 02-10-2011 à 18:28:37  profilanswer
 

Tout d'abord merci pour la réponse, ensuite je m'excuse mais je ne comprend pas pourquoi je dois utiliser cette fonction. Cela revient au même non ? au final de toute manière mon expression régulière n'est pas bonne il faut que je vire de mes résultats toutes parenthèses avec (année-année). Je n'ai pas encore eu le temps de chercher plus, je m'y mettrais ce soir.

n°2104434
CyberDenix
Posté le 03-10-2011 à 13:25:39  profilanswer
 

Je répondais juste à la problématique du preg_replace avec un remplacement dynamique, pour que la prochaine fois tu ne sèches plus dessus.
 
C'est le genre de truc qu'on rencontre peu fréquemment, mais qui peut te sauver la vie.


---------------
Directeur Technique (CTO)
n°2104470
spaik21
Posté le 03-10-2011 à 17:59:34  profilanswer
 

D'accord merci je comprend mieux.
Edit : bon je suis plus ou moins arrivé a faire ce que je voulais avec les regex, même si s'pas encore le top.


Message édité par spaik21 le 03-10-2011 à 22:37:28

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

  [Resolu] Regex : Variable et incrementation dans le replace

 

Sujets relatifs
require_once et paramètre sous forme de variableVariable avec des noms de répertoires
ajouter 1 mois à une variable date[RESOLU] En bash, curl avec du POST et plusieurs variable GET
[VBA excel] incrémentation et impréssion automatique[regex] url rewriting en russe...
[shell] comment retirer les ^M dans une variable[VBA]: variable static initialisation
[JS] Portée d'une variable, comprends pasPb d'url rewrite + regex
Plus de sujets relatifs à : [Resolu] Regex : Variable et incrementation dans le replace


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