Bonjour,

j'aimerai utiliser les regex en C et je me suis vite tourner vers la librairie regex.h. J'ai créé un petit code de test :
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
#include <stdio.h>
#include <regex.h>
 
int
regex_string_check(const char *string)
{
   const char *pattern = "[:alnum:]";
   regex_t regex;
   int ret;
 
   ret = regcomp(&regex, pattern, 0);
   if(ret != 0) return 1;
 
   ret = regexec(&regex, string, 0, NULL, 0);
   if(ret != 0) goto free_regex;
 
   regfree(&regex);
 
   return 0;
 
free_regex:
   regfree(&regex);
   return 2;
}
 
int
main(int argc, char **argv)
{
   printf("Regex return : %d\n", regex_string_check("tot 14o"));
   printf("Regex return : %d\n", regex_string_check("tototata14"));
   printf("Regex return : %d\n", regex_string_check("toto @_-|yu"));
}
J'ai ma fonction "regex_string_check" qui me renvoie :
* 0 si tout s'est passé,
* 1 s'il n'a pas réussi à initialiser la regex,
* 2 si la chaîne que je passe en paramètre ne correspond pas à ma regex.

La regex que j'utilise est assez simple : "[:alnum:]" => je veux seulement les caractères alpha-numériques [a-zA-Z0-9].
Logiquement il y a que la deuxième chaîne : "tototata14" qui devrait me renvoyer 0. La première contenant un espace et la deuxième des caractères non alpha-numérique.

Or, voici le résultat de l'exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
[root@bsd_dev ~/tests/c/regex]# ./regex
Regex return : 2
Regex return : 0
Regex return : 0
Je dois avoir un souci quelque part mais je vois pas où ?
regcomp : regcomp returns 0 if it succeeds in compiling the regular expression; otherwise, it returns a nonzero error code (see the table below).
regexec : regexec returns 0 if the regular expression matches; otherwise, it returns a nonzero value.

Cordialement.