IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 41
    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 : 41
    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 : 41
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         nmatch = preg.re_nsub + 1;
    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 : 40

    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 : 41
    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

Discussions similaires

  1. [VB.net][vs2005] Problème avec les expressions régulières
    Par zouhib dans le forum Windows Forms
    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