Sto provando ad estrarre una stringa da un'altra usando regex. che sto utilizzando le funzioni POSIX regex (regcomp, regexec
...), e non riuscire a catturare un gruppo ...Come si cattura un gruppo con espressioni regolari?
Per esempio, lasciare che il modello sia qualcosa di semplice come "MAIL FROM:<(.*)>"
(con REG_EXTENDED
CFLAGS)
voglio catturare tutto tra '<' e '>'
mio problema è che mi dà regmatch_t
i confini di tutto il modello (MAIL FROM: < ...>) invece di quello che c'è tra la parentesi ...
Cosa mi manca?
Grazie in anticipo,
completa: codice
#define SENDER_REGEX "MAIL FROM:<(.*)>"
int main(int ac, char **av)
{
regex_t regex;
int status;
regmatch_t pmatch[1];
if (regcomp(®ex, SENDER_REGEX, REG_ICASE|REG_EXTENDED) != 0)
printf("regcomp error\n");
status = regexec(®ex, av[1], 1, pmatch, 0);
regfree(®ex);
if (!status)
printf( "matched from %d (%c) to %d (%c)\n"
, pmatch[0].rm_so
, av[1][pmatch[0].rm_so]
, pmatch[0].rm_eo
, av[1][pmatch[0].rm_eo]
);
return (0);
}
uscite:
$./a.out "MAIL FROM:<abcd>$"
matched from 6 (M) to 22 ($)
soluzione:
come detto RarrRarrRarr, gli indici sono effettivamente in pmatch[1].rm_so
e pmatch[1].rm_eo
quindi regmatch_t pmatch[1];
diventa regmatch_t pmatch[2];
e regexec(®ex, av[1], 1, pmatch, 0);
diventa regexec(®ex, av[1], 2, pmatch, 0);
Grazie :)
Grazie, che era il problema :) – Sylvain