Estoy tratando de extraer una cadena de otra utilizando expresiones regulares. estoy usando las funciones de expresiones regulares POSIX (regcomp, regexec
...), y fallar en la captura de un grupo ...¿Cómo se captura un grupo con expresiones regulares?
Por ejemplo, dejar que el patrón sea algo tan simple como "MAIL FROM:<(.*)>"
(con REG_EXTENDED
cflags)
quiero capturar todo lo que entre '<' y '>'
Mi problema es que me da regmatch_t
los límites de todo el patrón (MAIL FROM: < ...>) en lugar de simplemente lo que hay entre el paréntesis ...
¿Qué me estoy perdiendo?
Gracias de antemano,
de edición: un código
#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);
}
salidas:
$./a.out "MAIL FROM:<abcd>$"
matched from 6 (M) to 22 ($)
solución:
como dijo RarrRarrRarr, los índices son de hecho en pmatch[1].rm_so
y pmatch[1].rm_eo
por lo tanto se convierte en regmatch_t pmatch[1];
regmatch_t pmatch[2];
y regexec(®ex, av[1], 1, pmatch, 0);
convierte regexec(®ex, av[1], 2, pmatch, 0);
gracias :)
Gracias, que fue el tema :) – Sylvain