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
![]()
Salut!
Je suis sur Fedora 15 et je n'arrive pas � utiliser regcomp(). �a me renvoie 11 au lieu de 0.
Quelqu'un peut-il m'aider ?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 regex_t preg; printf("%d\n",regcomp(&preg,"^[0-9]$",REG_EXTENDED| REG_NOSUB));
EDIT: J'ai pu trouver la solution, il fallait enlever les crochets.
salut !
je crois que l'erreur 11 c'est REG_ERANGE. et je crois que 0*-9 n'est pas tout-�-fait un range. le pb n'�tait pas les [] mais plut�t le * !
ceci �tant tu as de la chance, car le regex dont je dispose (et je remercie Isamu Hasegawa d'avoir port� cette lib pour mingw) ne rel�ve pas d'erreur ... pas de chance pour moi !
je te remercie d'avoir (re)ouvert la question parceque �a m'a permis de compiler une lib que je vais utiliser r�guli�rement : peu de fonctions, un encombrement d�risoire (dans l'ex�cutable). je pense pouvoir gagner pas mal de temps dans mes bricolages sur les fichiers texte �crits par d'autres pour les rendre conformes � mes manies.
A+
P.S. le tuto parle de syst�me posix. mais �a passe tr�s bien sous windows (au moins avec Tiny C).
je ne vois pas ce qui est incorrect dansNon l'erreur c'�tait invalid range end et c'�tait bien les crochets le probl�me.A+
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 regex_t preg; printf("%d\n",regcomp(&preg,"^[0-9]$",REG_EXTENDED| REG_NOSUB));
Honn�tement moi non plus... J'ai aussi chang� les flags.
Partager