Code en mode arrache pour tester
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <regex.h>int main (void) { regex_t preg; const char* str_request = "11/22/33"; const char* str_regex = "^([0123456789]+/){2}([0123456789]+)$";// const char* str_regex = "^([0123456789]+/)([0123456789]+/)([0123456789]+)$"; int err = regcomp(&preg, str_regex, REG_EXTENDED); if (err == 0) { regmatch_t* pmatch = NULL; size_t nmatch = preg.re_nsub; printf("main: find %d part%c\n", nmatch, ((nmatch > 1)? 's': ' ')); pmatch = malloc(sizeof(*pmatch) * nmatch); if (pmatch) { int part = 0; int match = regexec(&preg, str_request, nmatch, pmatch, 0); regfree (&preg); if (match == 0) { for(part = 0; part < nmatch; part++) { if (pmatch[part].rm_so == (size_t) -1) { break; /* No more groups */ } char str_part[strlen(str_request) + 1]; strcpy(str_part, str_request); str_part[pmatch[part].rm_eo] = 0; printf("main: Group %u: [%2u-%2u]: %s\n", part, pmatch[part].rm_so, pmatch[part].rm_eo, (str_part + pmatch[part].rm_so)); } } else if (match == REG_NOMATCH) { printf("main: %s n\'est pas une expression valide\n", str_request); } else { size_t size = regerror(err, &preg, NULL, 0); char* text = malloc(sizeof(*text) * size); if (text) { regerror(err, &preg, text, size); printf("main - Erreur 1: %s\n", text); free(text); } else { printf("main - Erreur 2: Memoire insuffisante\n"); exit(EXIT_FAILURE); } } } else { printf("main - Erreur 3: Memoire insuffisante\n"); exit(EXIT_FAILURE); } } else { printf("main: regcomp NULL\n"); } return(EXIT_SUCCESS);}