[regex] validation d'une chaine de caracteres
bonjour,
je souhaitais valider un chaine de carateres a l'aide de regex.
le format de ma chaine doit etre strinctement
(chaine de caracteres sans espaces, un espace,un point-virgule (et rien d'autre)
par exemple :
OK
Code:
1 2 3
| "1aX ;"
"a ;"
"a222aaaA ;" |
NOK
NOK
NOK
NOK
ect ect
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| int err;
int match;
int a = 0;
regex_t preg;
const char *str_regex = "(^[[:alnum:]]+ ;)"
const char *str_request = "2X ;";
err = regcomp (&preg, str_regex, REG_NOSUB | REG_EXTENDED);
if (err == 0) {
match = regexec (&preg,str_request, 0, NULL, 0);
regfree (&preg);
if (match == 0){
a = 1;
printf("%d",a);
return 1;
}
printf("%d",a);
} |
ma fonction doit retourner 1 si c'est bon.
si je tape elle retourne 1 alors que c'est NOK
je veux pas uniquement savoir si elle a trouver un motif dans ma chaine, je veux savoir si la chaine correspond exactement au motif
comment faire ?
merci
Pourquoi ne pas utiliser sscanf
Bonjour,
Alors je n'ai malheureusement pas eu l'occasion d'utiliser la bibliothéque regexp en C, en revanche, on peut s'en tirer avec un sscanf()
Code:
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
|
int isCorrect(const char* str)
{
int res = 0;
char* chaine = malloc(strlen(str)+1);
char espace,point_virgule,en_trop;
if(sscanf(str,"%s%c%c%c",chaine,&espace,&point_virgule,&en_trop) == 3 && espace == ' ' && point_virgule == ';')
{
res = 1;
}
free(chaine);
return res;
}
int main(void)
{
int i;
const char* expr[7] =
{
"1aX ;","a ;","a222aaaA ;",
"1a"," 1a","1a ;az; "," 1X;"
};
for(i=0;i<7;i++) printf("%d\n",isCorrect(expr[i]));
return EXIT_SUCCESS;
} |
ça peut paraitre un peu loud mais ça fontionne parfaitement du moins avec tes exemples