Parser une requête HTTP/GET en c ! regex ?
Bonjour,
J'ai dans une chaîne de caractère ceci:
Code:
request?foo=bar&bar=foo
Et je souhaite obtenir un résultat sous forme de tableau:
Code:
1 2 3 4 5
|
res[0][0] = "foo"
res[0][1] = "bar"
res[1][0] = "bar"
res[1][1] = "foo" |
Intuitivement il faudrait utiliser les regex non ?
genre
Code:
"[a-z]*\?([a-z]*)=([a-z]*)?(&([a-z]*)=([a-z]*))*"
mais à l'évidence cela ne fonctionne pas puique je n'arrive pas à avoir de parenthèses capturantes répétivives avec les regex.
Avez-vous une idée à me proposer ?
Re: Parser une requête HTTP/GET en c ! regex ?
Citation:
Envoyé par canard75
Intuitivement il faudrait utiliser les regex non ?
Bof, Je commencerais par un truc simple et standard genre strtok()
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 29 30 31 32 33 34 35 36 37 38 39 40 41
|
#include <stdio.h>
#include <string.h>
#define N(a) (sizeof(a)/sizeof*(a))
int main (void)
{
char s[] = "request?foo=bar&bar=foo";
char *pp[6] =
{
0
};
size_t i = 0;
size_t const n = N(pp) - 1;
char *p = s;
printf ("n = %u\n", (unsigned) n);
while ((pp[i] = strtok(p, "?=&")) != NULL
&& i < n)
{
printf ("i = %u\n", (unsigned) i);
if (i == 0)
{
p = NULL;
}
i++;
}
pp[i] = NULL;
{
size_t i = 0;
while (pp[i] != NULL)
{
printf ("pp[%u] = %s\n", (unsigned) i, pp[i]);
i++;
}
}
return 0;
} |