Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Les expressions r�guli�res en C [Tutoriel]


Sujet :

C

  1. #1
    R�dacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2004
    Messages
    5 840
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par d�faut Les expressions r�guli�res en C
    http://nicolasj.developpez.com/articles/regex/

    Ce tutoriel aborde l'utilisation des expressions r�guli�res en C
    Vous pouvez laisser un commentaire sur cet article � la suite.

  2. #2
    R�dacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2004
    Messages
    5 840
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par d�faut
    Citation Envoy� par Malynx
    Premi�re exemple, un peu trop long et/ou complexe � mon gout.
    Toujours prendre un exemple tr�s simplifier au premier abord.

  3. #3
    R�dacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2004
    Messages
    5 840
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par d�faut
    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.
    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 :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    const char *str_regex = "www\\.([-_[:alnum:]]+\\.[[:lower:]]{2,4})";
    et dans le if (match == 0) faire un affichage de [0] et de [1]...

  4. #4
    Membre tr�s actif Avatar de ZeRevo
    Inscrit en
    Avril 2007
    Messages
    302
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 302
    Par d�faut
    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

  5. #5
    Candidat au Club
    Inscrit en
    D�cembre 2009
    Messages
    2
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2009
    Messages : 2
    Par d�faut
    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

  6. #6
    R�dacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2004
    Messages
    5 840
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par d�faut
    Citation Envoy� par stef_malte Voir le message
    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
    size_t est aussi d�fini dans le fichier d'en t�te stdlib.h qui est bien inclue.

    Citation Envoy� par stef_malte Voir le message
    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);
    Non en C la conversion est implicite et fortement recommand�e, �a permet par exemple de d�tecter une erreur de compilateur Il 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

  7. #7
    Membre tr�s actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    247
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Par d�faut
    Salut!
    Je suis sur Fedora 15 et je n'arrive pas � utiliser regcomp(). �a me renvoie 11 au lieu de 0.
    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));
    Quelqu'un peut-il m'aider ?

    EDIT: J'ai pu trouver la solution, il fallait enlever les crochets.

  8. #8
    Membre chevronn�
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par d�faut
    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).

  9. #9
    Membre tr�s actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    247
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Par d�faut
    Citation Envoy� par anacharsis Voir le message
    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 * !
    Non l'erreur c'�tait invalid range end et c'�tait bien les crochets le probl�me. En fait j'avais mis 0-9 dans mon code, j'ai fait une erreur en �crivant le post.

  10. #10
    Membre chevronn�
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par d�faut
    Non l'erreur c'�tait invalid range end et c'�tait bien les crochets le probl�me.
    je ne vois pas ce qui est incorrect dans
    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));
    A+

  11. #11
    Membre tr�s actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    247
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Par d�faut
    Honn�tement moi non plus ... J'ai aussi chang� les flags.

Discussions similaires

  1. R�ponses: 13
    Dernier message: 22/06/2006, 15h56
  2. Probl�me avec les expressions r�guli�res
    Par Premium dans le forum Collection et Stream
    R�ponses: 11
    Dernier message: 18/06/2006, 16h41
  3. Les Expressions R�guli�res
    Par zEndymion dans le forum Access
    R�ponses: 4
    Dernier message: 12/06/2006, 13h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo