Bonjour à tous!
Je développe un projet en C et j'ai besoin de reconnaître une certain format de
chaîne de caractères. Je me suis donc tourné vers les expressions régulières.
Voici un exemple de chaîne que je veux reconnaître: "[(3)(2)(0)(7)]".
J'ai donc écrit cette regex:
"^\[(\(-?[0-9]+(\.[0-9]+)?\)){2}\([0-9]\)\(-?[0-9]+(\.[0-9]+)?\)\]$"
Cependant, la reconnaissance ne marche pas.
regexec me retourne: "No match". J'ai même essayé toutes les combinaisons de drapeaux mais sans succès.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <sys/types.h> #include <regex.h> . . . const char regex_str[] = "^\[(\(-?[0-9]+(\.[0-9]+)?\)){2}\([0-9]\)\(-?[0-9]+(\.[0-9]+)?\)\]$"; regex_t *atom_mbr_regex = malloc(sizeof(regex_t)); . . . regcomp(atom_mbr_regex, regex_str, REG_EXTENDED); regexec(atom_mbr_regex, "[(3)(2)(0)(7)]", 0, NULL, 0);
J'ai pourtant testé avec bash dans le terminal et aussi en PHP; la reconnaissance marche parfaitement.
//dans le terminal
Code : Sélectionner tout - Visualiser dans une fenêtre à part $ echo "[(3)(2)(0)(7)]" | grep -E "^\[(\(-?[0-9]+(\.[0-9]+)?\)){2}\([0-9]\)\(-?[0-9]+(\.[0-9]+)?\)\]$"
//dans un script PHP
Code : Sélectionner tout - Visualiser dans une fenêtre à part preg_match("#^\[(\(-?[0-9]+(\.[0-9]+)?\)){2}\([0-9]\)\(-?[0-9]+(\.[0-9]+)?\)\]$#", "[(3)(2)(0)(7)]");
Je serais très enchanté qu'on me montre là où je me suis trompé (ou bien s'il y a un bug) pour que je puisse progresser dans mon projet.![]()
Partager