Posix regex : capture d'une sous chaine
Bonjour,
après voir lu le tutorial sur developpez.com à propos de la librairie regex, j'ai un petit problème. Par exemple avec une expression régulière toute simple :
Code:
1 2
|
www\.([[:alnum:]]*)\.([[:lower:]]*) |
J'aimerai non pas extraire le motif correspondant à l'expression régulière mais les sous-chaines correspondants aux parenthèses de mon motif.
Avec la structure regmatch_t *pmatch;
ou
pmatch[0].rm_so; est l'indice du premier caractère du motif
pmatch[0].rm_eo; est l'indice du dernier caractère du motif
je pensais que :
pmatch[1].rm_so; etait l'indice du premier caractère de la sous chaine correspondant à la parenthèse 1.
pmatch[1].rm_eo; etait l'indice du dernier caractère de la sous chaine correspondant à la parenthèse 1.
Mais apparemment pas du tout.
J'utilise donc ce code qui ne fonctionne pas.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
regcomp (&preg, motif, REG_EXTENDED);
pmatch = malloc (sizeof (*pmatch) * nmatch);
nmatch = preg.re_nsub;
if(pmatch)
{
while(regexec (&preg, chaine, nmatch, pmatch, 0) == 0)
{
for(i = 1; i <= nmatch; i ++)
{
trouv = NULL;
start = pmatch[i].rm_so;
end = pmatch[i].rm_eo;
size = end - start;
trouv = malloc (sizeof (*trouv) * (size + 1));
if(trouv)
{
strncpy (trouv, &chaine[start], size);
trouv[size] = 0;
m[j++]= trouv;
}
}
chaine = chaine + end;
}
}
regfree(&preg); |
Est-il possible de faire donc une capture de parenthèses avec cette librairie ?
si non vers quel librairie dois-je me tourner ?
Merci