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

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Expression regulière: supprimer les virgules entre parenthèses

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Expression regulière: supprimer les virgules entre parenthèses

n°2077939
ksss
Posté le 24-05-2011 à 17:15:13  profilanswer
 

Bonjour à tous et à toutes,
 
 
Jme tire le peu de cheveux qui me reste depuis tout à l'heure sur l'expression régulière qui me  
permettrait de remplacer toutes les occurrences de virgules ',' qui se trouvent entre parenthèses closes.  
 
Par exemple remplacer  
"mot1, (mot2, mot3, mot4), (mot5, mot6, mot7, mot8), mot9" par  
"mot1, (mot2- mot3- mot4), (mot5- mot6- mot7- mot8), mot9".
 
Voilà où j'en suis, mais sans succès :sweat:. Je penche pour de la récursion (\R)  :??: ?:  

Code :
  1. $str="mot1, (mot2, mot3, mot4), (mot5, mot6, mot7, mot8), mot9"
  2. preg_match("#\([^,]*),([^,]*)\)#", "($1-$2), $str);


 
merci.
 :jap:


Message édité par ksss le 24-05-2011 à 17:32:58
mood
Publicité
Posté le 24-05-2011 à 17:15:13  profilanswer
 

n°2077945
Fk01
Posté le 24-05-2011 à 17:36:29  profilanswer
 

Salut, j'y suis arrivé en deux fois, je te drop ça ;)
 
C'est un peut barbare je te le concède mais j'ai pas le temps d'optimiser la chose.
Première chose, voici le regex que j'ai utilisé pour capturer les "paquets": #(\w+), \((.+)\), \((.+)\), (\w+)#i
Pour avoir un aperçu je te propose de jeter un œil sur ce Regex Tester.
 
Le reste du traitement est on ne peut plus basique, si ce n'est que j'ai scindé le tout pour une manière compréhension.

Code :
  1. <?php
  2. $subject = "mot1, (mot2, mot3, mot4), (mot5, mot6, mot7, mot8), mot9";
  3. $pattern = "#(\w+), \((.+)\), \((.+)\), (\w+)#i";
  4. preg_match($pattern, $subject, $matches);
  5. $string = $matches;
  6. $replacement = "-";
  7. $string = preg_replace("#,#", $replacement, $string);
  8. $replacement = "$string[1], ($string[2]), ($string[3]), $string[4]";
  9. $result = preg_replace($pattern, $replacement, $subject);
  10. echo $result;
  11. ?>


 
Ce n'est pas parfait, mais si tu as des questions, n'hésites pas ;)


Message édité par Fk01 le 24-05-2011 à 18:18:51
n°2077998
ksss
Posté le 25-05-2011 à 00:02:42  profilanswer
 

Salut,
 
Tout d'abord merci pour ta considération.
 
Concernant ta réponse, à moins que je ne me trompe, elle ne gère que la forme qui est celle de l'exemple donné hors celui-ci n'est en fait qu'un exemple.  
La chaine de caractère peut prendre la forme (mot1, mot2) mot3 mot4 (mot5), mot6, (mot7 mot8) et ainsi de suite. Il n'y a pas de format précis dans la répartition des parenthèses.
 
Après j'avais pensé à une forme en plusieurs étapes comme ce que tu proposes et le pattern pour extraire les contenus entre parenthèse était genre : "#\(([^\)])\)#i", puis faire un str_replace mais je cherchais quelque chose de plus harmonieux et léger en consommation (c'est pour du parsing de gros fichier....
 
Merci.

n°2077999
Fk01
Posté le 25-05-2011 à 00:34:51  profilanswer
 

Ha ok, désolé je n'avais pas bien saisi l'idée, autant pour moi.
Je regarde ça dès que j'ai une minute ;)

n°2078085
CyberDenix
Posté le 25-05-2011 à 14:07:15  profilanswer
 

Ton problème est que les regexp sont par défaut gloutonnes (greedy), tu dois donc forcer ta regexp en ungreedy avec le modifier 'U'
 
preg_replace('`maregexpdeouf`Usi',  
 
U -> Ungreedy
s -> multiline
i -> case insensitive


Message édité par CyberDenix le 25-05-2011 à 14:08:58

---------------
Directeur Technique (CTO)

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

  [PHP] Expression regulière: supprimer les virgules entre parenthèses

 

Sujets relatifs
PHP / JavaScriptPHP - Formulaire problème value
[??] Création dynamique de page sur Mediawiki (à partir de code PHP)Qui voudrait m'aider en Php pour mon forum ?
[RESOLU] Modification d'un fichier en PHPsupprimer des lignes en fonction d'une valeure située sur la 5 eme col
Pb requête SQL - Syntaxe PHP[PHP] Problème configuration wamp php.ini
Php fonction rename qui donne des noms bizzares en 13 caracteres.Limiter la charge d'un serveur PHP
Plus de sujets relatifs à : [PHP] Expression regulière: supprimer les virgules entre parenthèses


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