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 :

Comment utiliser REGEXEC => expressions régulières [Tutoriel]


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    juin 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2002
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Comment utiliser REGEXEC => expressions régulières
    Quelqu'un sait il utilser cette fonction (regexec) qui permet d'utiliser les expressions régulières en C (comme un grep par exemple). (=> regex.h)
    Voici sa structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int regexec (const  regex_t  *preg,  const  char  *string,
                        size_t  nmatch,  regmatch_t   pmatch[],   int
                        eflags);
    Un exemple serait le bienvenu pour comprendre.
    Merci d'avance.

    Tutoriel associé : Les expressions régulières en C
    --< KwIsAcH >--

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    mars 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 92
    Points : 84
    Points
    84
    Par défaut
    Voici une fonction qui se trouve dans mon projet (tu peux le downloader pour avoir plus d'infos) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    gint gw_strcmp_strregex &#40; gchar *str, gchar *regex, gboolean case_sensitive&#41;
    &#123;
    	regex_t *r;
    	gint cflags;
    	size_t no_sub;
    	regmatch_t *reg_result;
    	gint result = -1;
     
     
    #ifdef GW_DEBUG_TOOLS_COMPONENT
    	g_print &#40; "*** GW - %s &#40;%d&#41; &#58;&#58; %s&#40;&#41;\n", __FILE__, __LINE__, __PRETTY_FUNCTION__&#41;;
    #endif
     
    	if &#40; &#40;r = &#40;regex_t *&#41; g_malloc &#40; sizeof &#40; regex_t&#41;&#41;&#41; != NULL &#41;
    	&#123;
    		if &#40; case_sensitive == FALSE &#41;
    		&#123;
    			cflags = REG_ICASE;
    		&#125;
    		else
    		&#123;
    			cflags = 0;
    		&#125;
     
    		if &#40; regcomp &#40; r, regex, cflags&#41; != 0 &#41;
    		&#123;
    			regfree &#40; r&#41;;
    		&#125;
    		else
    		&#123;
    			no_sub = r->re_nsub + 1;
     
    			if &#40; &#40;reg_result = &#40;regmatch_t *&#41; g_malloc &#40; sizeof &#40; regmatch_t&#41; * no_sub&#41;&#41; != NULL &#41;
    			&#123;
    				if &#40; regexec &#40; r, str, no_sub, reg_result, 0&#41; == 0 &#41;
    				&#123;
    					g_free &#40; r&#41;;
     
    					result = 0;
    				&#125;
     
    				g_free &#40; reg_result&#41;;
    			&#125;
    		&#125;
    	&#125;
     
    #ifdef GW_DEBUG_TOOLS_COMPONENT
    	if &#40; result == 0 &#41;
    	&#123;
    		g_print &#40; "*** GW - %s &#40;%d&#41; &#58;&#58; %s&#40;&#41; &#58; %s == %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, str, regex&#41;;
    	&#125;
    	else
    	&#123;
    		g_print &#40; "*** GW - %s &#40;%d&#41; &#58;&#58; %s&#40;&#41; &#58; %s <> %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, str, regex&#41;;
    	&#125;
    #endif
     
    	return result;
    &#125;
    Zero
    My site : http://blog.lecacheur.com
    GWhere project : http://www.gwhere.org
    Debian Addict site : http://www.debianaddict.org

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    juin 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2002
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci je vais regarder ca... mais ca ma l'air assez complexe ....
    --< KwIsAcH >--

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    juin 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2002
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    salut, pourrais tu m'expliquer qq pts...

    gint gw_strcmp_strregex ( gchar *str, gchar *regex, gboolean case_sensitive)
    => que veut dire gint ? pourquoi pas int ?

    et quels sont les types passés ? ils sont définis comment ?

    merci d'avance
    --< KwIsAcH >--

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    juin 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2002
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Savez vous pourquoi je peux avoir cette erreur qui provient du "regex.h" ?

    /usr/include/regex.h:46: syntax error before `regoff_t'
    /usr/include/regex.h:46: warning: data definition has no type or storage class
    /usr/include/regex.h:56: syntax error before `regoff_t'
    --< KwIsAcH >--

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    mars 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 92
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par kwisach
    gint gw_strcmp_strregex ( gchar *str, gchar *regex, gboolean case_sensitive)
    => que veut dire gint ? pourquoi pas int ?
    merci d'avance
    J'utilise la Glib. Dans cette librairie tous les types de base sont redéfinis. Tu n'as qu'à enlever les g devant les gchar, gint, gboolean, ...

    Les paramètres :
    str : chaine à comparer
    regex : l'expression régulière
    case_sensitive : si oui ou non la casse est sensible

    Pour les détails voir les tutoriels et cours pour apprendre la programmation en langage C : http://c.developpez.com/cours/
    Zero
    My site : http://blog.lecacheur.com
    GWhere project : http://www.gwhere.org
    Debian Addict site : http://www.debianaddict.org

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation d'une expression régulière dans un AWK
    Par Nattiz dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 27/08/2013, 22h08
  2. Comment utiliser les Expressions régulières de manière intelligente?
    Par Nono Sto dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/10/2012, 15h58
  3. Réponses: 6
    Dernier message: 15/12/2007, 00h26
  4. Comment utiliser un "Regular Expression"
    Par IdrilElendil dans le forum VBScript
    Réponses: 2
    Dernier message: 20/08/2007, 23h04
  5. Utilisation d'expression régulière
    Par red210 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 16/04/2005, 17h45

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