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 :
- <?php
- $compteur=1;
- $texte='La Fluctuation de l’ouvre-boîte électrique (The Electric Can Opener Fluctuation)
- Le Grillon des champs (The Jiminy Conjecture)
- La Déviation Gothowitz (The Gothowitz Deviation)
- La Solution pirate (The Pirate Solution)
- Le Tournoi de cartes (The Creepy Candy Coating Corollary)';
- $texte = preg_replace('#(.+)\((.+)\)#', 'UPDATE `bdd`.`serie` SET `titre_episode` = \'$2\' WHERE `serie`.`id` ='.$compteur++.';<br />', $texte);
- echo($texte);
- ?>
|
le problème c'est que je n'ai pas d’incrémentation... le résultat est celui ci :
Code :
- UPDATE `bdd`.`serie` SET `titre_episode` = 'The Electric Can Opener Fluctuation' WHERE `serie`.`id` =1;
- UPDATE `bdd`.`serie` SET `titre_episode` = 'The Jiminy Conjecture' WHERE `serie`.`id` =1;
- UPDATE `bdd`.`serie` SET `titre_episode` = 'The Gothowitz Deviation' WHERE `serie`.`id` =1;
- UPDATE `bdd`.`serie` SET `titre_episode` = 'The Pirate Solution' WHERE `serie`.`id` =1;
- 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 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 .
Voila donc ce que ca donne maintenant :
Code :
- <?php
- $texte="Première saison (2005-2006)[modifier]
- Article détaillé : Saison 1 de How I Met Your Mother.
- Un signe (Pilot)
- Je te présente Ted (Purple Giraffe)
- Un goût de liberté (Sweet Taste of Liberty)
- Retour de flamme (Return of the Shirt)
- La Soirée dégustation (Okay Awesome)";
- $texte = addslashes($texte);
- preg_match_all('#(.+)\((.+)\)#',$texte,$out, PREG_PATTERN_ORDER);
- $id_depart=115;
- foreach($out[2] as $line)
- {
- echo 'UPDATE `bdd`.`serie` SET `titre_episode` = \'';
- echo $line;
- echo '\' WHERE `serie`.`id` =';
- echo $id_depart;
- echo ';<br />';
- $id_depart++;
- }
- ?>
|
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 :
- #(.+)\((^[^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