2009-08-25 7 views
4

Faire une regex en C# ou PHP est très facile pour moi maintenant. Cependant, actuellement, j'ai besoin d'utiliser regex en C. Et, je ne semble pas comprendre l'utilisation de regcomp ou regexec pleinement. C'est certainement à cause de mon manque d'expérience en C.Expression régulière en C

Toute aide et exemples seraient grandement appréciés!

Répondre

5

Cela peut vous aider à démarrer, comme vous l'indiquez regex(3) fonctions. Voici un programme trivial correspondant à ses arguments. Cependant, si vous êtes relativement nouveau à C, vous voudrez aller lentement avec regex(3), comme vous allez travailler avec des pointeurs et des tableaux et regmatch_t-offsets fournis et les lions et les tigres et les ours. ;)

$ ./regexec '[[:digit:]]' 56789 alpha " " foo12bar 
matched: 56789 
matched: foo12bar 
$ ./regexec '[[:digit:]](foo' 
error: Unmatched (or \(
$ ./regexec '[' 
error: Invalid regular expression 

... et la source:

#include <sys/types.h> 
#include <regex.h> 
#include <stdio.h> 

int main(int argc, char **argv) { 
    int r; 
    regex_t reg; 

    ++argv; /* Danger! */ 

    if (r = regcomp(&reg, *argv, REG_NOSUB|REG_EXTENDED)) { 
    char errbuf[1024]; 
    regerror(r, &reg, errbuf, sizeof(errbuf)); 
    printf("error: %s\n", errbuf); 
    return 1; 
    } 

    for (++argv; *argv; ++argv) { 
    if (regexec(&reg, *argv, 0, NULL, 0) == REG_NOMATCH) 
     continue; 
    printf("matched: %s\n", *argv); 
    } 

    return 0; 
} 
+0

Parfait merci toi! – Dave

+0

Aussi pour quelqu'un d'autre qui regarde cela, la réponse de John Millikin est tout aussi bonne. Son exemple fourni est pour PCRE et pilcrow est pour l'expression rationnelle de GNU C Lib je crois. – Dave

7

Utilisez la bibliothèque PCRE. Des exemples sont inclus dans la source, dans le répertoire demo/. Here's a direct link to pcredemo.c.

+0

Une bibliothèque regex compatible perl - n'est pas que contre la loi sur les droits de l'homme? –

+0

PCRE est à peu près un standard, ce qui facilite grandement la tâche des rédacteurs et des mainteneurs traitant les expressions régulières. – strager

+0

Et ... tout ce dont j'ai besoin est un exemple d'utilisation de PCRE dans C ... TT – Dave

2

Vous avez besoin d'une bibliothèque qui le fournit, et il y en a plusieurs à choisir. PCRE en est un.

+0

Pour John et Dirk, j'ai déjà installé PCRE mais je suppose que je suis intéressé par son utilisation dans C. – Dave

0

La bibliothèque gnu C a une regex library

+0

Oui, et je ne pouvais pas comprendre comment l'utiliser ... à savoir les fonctions regcomp et regexec – Dave