http://nicolasj.developpez.com/articles/regex/
Vous pouvez laisser un commentaire sur cet article à la suite.Ce tutoriel aborde l'utilisation des expressions régulières en C
http://nicolasj.developpez.com/articles/regex/
Vous pouvez laisser un commentaire sur cet article à la suite.Ce tutoriel aborde l'utilisation des expressions régulières en C
C'est très bien expliquer mais y'a des petits problèmes :
Oubli de libérer de la memoire sur le deuxième exemple (le malloc des regmatch_t)
pour cette partie dans le code 2, il faut faire :
car le premier match est la chaine complete et les sous groupes viennent ensuite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part nmatch = preg.re_nsub + 1;
de plus le pmatch[0] ne va pas chercher le groupe définit dans str_regex (qui entoure tout) mais la chaine matché ici c'est le même résultat mais c'est un coup de chance.
Je propose :
et dans le if (match == 0) faire un affichage de [0] et de [1]...
Code : Sélectionner tout - Visualiser dans une fenêtre à part const char *str_regex = "www\\.([-_[:alnum:]]+\\.[[:lower:]]{2,4})";
Je viens de me faire avoir avec le "nmatch = preg.re_nsub + 1;", j'arrivais pas à capturer le dernier élément, ça serait bien de corriger le document
J'ai relevé quelques bugs en voulant reprendre le code.
1 - Sous ubuntu 10.04, en développant avec netbeans 6.8, size_t n'est pas reconnue, il faut rajouter la bibliothèque à la compilation, elle se trouve par défaut dans /usr/lib/gcc/i486-linux-gnu/4.4/include/stddef.h
2 - Les mallocs ont des problèmes de conversion de type, il faut changer forcer le typage :
- pmatch = (regmatch_t *)malloc (sizeof (*pmatch) * nmatch);
- site = (char *)malloc (sizeof (*site) * (size + 1));
- text = (char *)malloc (sizeof (*text) * size);
voila, j'espère que ca pourra aider des gens![]()
size_t est aussi défini dans le fichier d'en tête stdlib.h qui est bien inclue.
Non en C la conversion est implicite et fortement recommandée, ça permet par exemple de détecter une erreur de compilateurIl est fort probable que tu compile en C++ et non en C : Les incompatibilités entre le C et le C++ > Les pointeurs de type void
![]()
Partager