cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008
-
18 août 2006 à 12:36
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008
-
18 août 2006 à 17:34
Bonjour, je souhaiterais capturer plusieurs groupes emboités les uns dans les autres dans une chaine de caractère à l'aide d'une expression régulière.
Voici un exemple :
string exemplaire = "aaaaaaab";
Regex reg = new Regex("a*b");
MatchCollection Mcol = reg.Matches(exemplaire);
Je souhaiterais obtenir les groupes suivants :
b ;
ab ;
aab ;
aaab ;
aaaab ;
...
Malheureusement je n'obtiens que le groupe le plus grand, c'est à dire "aaaaaaab".
Je voulais donc savoir si il existe une solution pour capturer tous ces groupes ?
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 18 août 2006 à 17:34
Désolé sabmafate, ta solution ne marche pas. Elle retourne un seul groupe contenant "aaaaaaab".
J'ai un peu avancé entre temps, sans trouver vraiment la solution. En utilisant les backreferences, j'obtiens le bon nombre de groupe mais chaque groupe est de contenu vide.
Voilà ce qeu j'ai écris :
string exemplaire = "aaaaaaab";
string pattern = @"(?<1>b)(?<1>\1)|(?<1>a\1)*";
Regex reg = new Regex(pattern);
MatchCollection Mcol = reg.Matches(exemplaire);
int t = Mcol.Count;
string[] Result = new string[t];
for (int i = 0; i < t; i++)
Result[i] = Mcol[i].Groups[1].Value;
Le nombre total de groupes t est bien égal à 8, mais chacun de ces groupes est vide (Result est une enumeration de longueur 8 dont chancuns de ses éléments est une chaine vide.)
En fait, j'ai trouvé ce pattern en me disant qu'il fallait mettre la valeurs b est mémoire et faire une sorte de récurrence en ajoutant à chaque fois un a. J'ai ensuite utilisé le caractère | qui est le seul à ma connaissance qui permet de revenir en arrière dans les expressions régulières. Tout ça pour dire que le fonctionnement détaillé de ce pattern m'échappe. Je ne comprends surtout pas pourquoi chaque groupe en sortie est vide. Quelqu'un saurait-il m'expliquer ce comportement étrange ? Suis-je loin du résultat que je recherche ?