Bir regex kullanarak başka bir dizeden ayıklamak çalışıyorum. desen gibi basit bir olalım ÖrneğinNormal ifadeli bir grubu nasıl yakalarsınız?
... I (... regcomp, regexec
) POSIX regex fonksiyonlarını kullanıyorum ve ben bir grup yakalamada başarısız "MAIL FROM:<(.*)>"
(REG_EXTENDED
CFLAGS ile)
Ben '>' '<' arasındaki her şeyi yakalamak istediğiniz ve
Sorunum regmatch_t
bana bütün desen sınırlarını sağlamasıdır: parantez aramda sadece ne yerine (MAIL FROM ...> <) ...
Neyi eksik? peşin
sayesinde
düzenleme: Bazı kod
#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);
}
çıkışlar:
$./a.out "MAIL FROM:<abcd>$"
matched from 6 (M) to 22 ($)
çözüm:
RarrRarrRarr bahsedilen olarak, endeks pmatch[1].rm_so
gerçekten de vardır ve bu nedenle regmatch_t pmatch[1];
pmatch[1].rm_eo
regmatch_t pmatch[2];
ve regexec(®ex, av[1], 1, pmatch, 0);
regexec(®ex, av[1], 2, pmatch, 0);
sayesinde :)
Teşekkürler, bu sorun oldu :) – Sylvain