205 votes

Expressions régulières en C: exemples?

Je suis après quelques exemples simples et les meilleures pratiques d’utilisation des expressions régulières en ANSI C. `` ne fournit pas tant que ça aide.

272voto

Laurence Gonsalves Points 50783

Les expressions régulières ne sont pas partie de la norme ANSI C. Il semble que vous pourriez être parler de l'expression régulière POSIX de la bibliothèque, qui est livré avec la plupart (tous?) *nixes. Voici un exemple d'utilisation de POSIX regexes dans C:

#include <regex.h>        
regex_t regex;
int reti;
char msgbuf[100];

/* Compile regular expression */
reti = regcomp(&regex, "^a[[:alnum:]]", 0);
if (reti) {
    fprintf(stderr, "Could not compile regex\n");
    exit(1);
}

/* Execute regular expression */
reti = regexec(&regex, "abc", 0, NULL, 0);
if (!reti) {
    puts("Match");
}
else if (reti == REG_NOMATCH) {
    puts("No match");
}
else {
    regerror(reti, &regex, msgbuf, sizeof(msgbuf));
    fprintf(stderr, "Regex match failed: %s\n", msgbuf);
    exit(1);
}

/* Free compiled regular expression if you want to use the regex_t again */
regfree(&regex);

Sinon, vous voudrez peut-être vérifier PCRE, une bibliothèque Perl-compatible regular expressions dans C. La syntaxe de Perl est à peu près la même syntaxe Java, Python, et un certain nombre d'autres langues. La syntaxe POSIX est la syntaxe utilisée par le grep, sed, vi, etc.

14voto

Michiel Buddingh Points 3437

Il n’est probablement pas ce que vous voulez, mais un outil comme re2c peut compiler POSIX(-ish) des expressions régulières pour ANSI C. Il est écrit comme un remplacement pour `` , mais cette approche permet de sacrifier la souplesse et la lisibilité pour le dernier morceau de vitesse, si vous avez vraiment besoin.

12voto

おおさま Points 167

Peut être que vous essayez juste de trouver ce morceau de code

Brian W. Kernighan et Rob Pike a écrit pour traiter avec des caractères joker dans « grep »

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X