Bonjour,
J'ai trouvé cet article sur les expressions régulières en C mais je n'ai pas réussi à faire ce que je voulais, peut-être m'y suis-je mal pris, peut-être aussi que la réponse à ma question ne figure pas dans l'article. En tout cas je remercie ceux et celles qui essaieront de m'aider.
http://nicolasj.developpez.com/articles/regex/#LIV-A
J'ai écrit un programme simple qui reçoit 5 arguments en ligne de commande argv[1], argv[2], argv[3], argv[4] et argv[5]
Les 4 premiers paramètres attendus sont des entiers (car j'utilise dans le programme la fonction atoi sur ces 4 arguments). Je voudrais m'assurer que mon programme ne s'exécute jusqu'au bout que si ces 4 arguments sont bien des entiers, car je ne veux pas de résultats inattendus retournés par atoi.
J'ai donc essayé ceci :
Le problème c'est qu'il laisse passer ./test l4 5 5 2 mat.data mais aussi ./test 5.72 6 2 4 mat.data pour simplifier je ne teste que le premier dans le programme pour l'instant.
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 int err; regex_t preg; const char *str_regex = "[1-9][:digit:]*"; const char *str_request = argv[1]; err = regcomp (&preg, str_regex, REG_NOSUB ); if (err == 0) { int match; /* (2) */ match = regexec (&preg, str_request, 0, NULL, 0); /* (3) */ regfree (&preg); /* (4) */ if (match == 0) { printf ("Les arguments sont valides\n"); } /* (5) */ else if (match == REG_NOMATCH) { printf ("Les arguments sont invalides\n"); } }
Mon but final c'est que si l'un des 4 paramètres n'est pas un entier donc de la forme un chiffre de 1 à 9 suivi de n'importe quel nombre de chiffres de 0 à 9 alors j'aimerai m'en apercevoir et arrêter l'exécution.
Quelqu'un a-t-il une idée ? Que ce soit en remplaçant atoi par une fonction plus performante, en se servant mieux des expressions régulières ou en utilisant une stratégie différente ? Merci beaucoup![]()
Partager