|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : août 2010 Messages : 11 ![]() |
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. Je penche pour de la récursion (\R) ?: Code :
|
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Benjamin PREVOTArchitecte de système d'information Inscription : septembre 2004 Messages : 1 568 ![]() |
Bonjour,
Tu peux essayer ceci Code :
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN F.A.Q. : Java, PHP, (X)HTML / CSS N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème |
||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : août 2010 Messages : 11 ![]() |
Salut,
Avant tout merci pour ta considération. Concernant la solution que tu proposes, ça fonctionne dans la plupart des cas sauf s'il y a parenthèses imbriquées (mot1, (mot2, mot3), mot4) qui donnerait (mot1- (mot2- mot3), mot4) mais je ne pense pas que ça puisse se faire sans récursion.... J'avais vu une solution sur le net qui ressemblait à /\([^\)]+|[\R]\)/ sans bien comprendre... |
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Développeur Web Inscription : octobre 2009 Messages : 72 ![]() |
Ce lien peut peut-être t'aider à piger la récursivité http://www.skdevelopment.com/php-reg...xpressions.php 5. How to use recursion in regular expressions.
bon courage |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : août 2010 Messages : 11 ![]() |
Oui, merci, c'est là que j'avais vu ça, je en retrouvais plus le lien.
Je vais re-regarder ça. |
|
|
00
|
|
|
#6 | ||
|
Membre actif
![]() Inscription : mai 2003 Messages : 133 ![]() |
Si on suit l'exemple, on peut exprimer simplement ce dont on a besoin: « supprimer toutes les virgules qui ne sont ni précédées ni suivies par une parenthèse ».
Ce qui se traduit très simplement en expression rationnelle : Code PHP :
|
||
|
|
00
|
|
|
#7 |
|
Membre actif
![]() Inscription : mai 2003 Messages : 133 ![]() |
Si jamais tu as besoin de quelque chose de plus élaboré, alors je suggère que tu utilise autre chose que les expressions rationnelles, comme par exemple le tokonizer de PHP…
|
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : août 2010 Messages : 11 ![]() |
Salut,
Merci de participer à la discussion. Effectivement, la chaine de caractère que j'ai mis n'est qu'un exemple etrien ne me garantie qu'il n'y ait pas une partie de phrase qui correspondrait à : mot1, mot2 (mot4, mot5) mot7, mot8. Je vais jeter un œil du coté des tokenizer. |
|
|
00
|
|
|
#9 | ||
|
Membre régulier
![]() Étudiant Inscription : juin 2011 Messages : 55 ![]() |
Il est vrai qu'avec des regex il est très difficile (voir peut être impossible?) de gérer des parenthèses, crochets, balises, ou accolades imbriquées. La solution (même si c'est très peu convenable) serait que tu développe ta propre fonction sur l'algo suivant :
Code :
Oublie pas la fonction substr pour regarder quel est le premier caractère recherché suivant. Pense aussi à incrémenter la variable position lorsque tu trouve une parenthèse sinon au tour suivant, la position du prochain terme sera 0 et la parenthèses sera comptée infiniment |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com