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 :
J'ai ma fonction "regex_string_check" qui me renvoie :
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(®ex, pattern, 0); if(ret != 0) return 1; ret = regexec(®ex, string, 0, NULL, 0); if(ret != 0) goto free_regex; regfree(®ex); return 0; free_regex: regfree(®ex); 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")); }
* 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 :
Je dois avoir un souci quelque part mais je vois pas où ?
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
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.
Partager