我试图从另一个使用正则表达式提取一个字符串。
我正在使用POSIX正则表达式函数(regcomp,regexec …),我在捕获组时失败…
原文链接:https://www.f2er.com/regex/357435.html我正在使用POSIX正则表达式函数(regcomp,regexec …),我在捕获组时失败…
例如,让模式像“MAIL FROM:<(。*)>”一样简单。
(用REG_EXTENDED cflags)
我想捕捉’<'之间的所有内容和'>‘
我的问题是regmatch_t给了我整个模式的边界(MAIL FROM:< ...>),而不是括号内的…
我失踪了什么
提前致谢,
编辑:一些代码
#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); }
输出:
$./a.out "012345MAIL FROM:<abcd>$" matched from 6 (M) to 22 ($)
解:
正如RarrRarrRarr所说,这些指标确实在pmatch [1] .rm_so和pmatch [1] .rm_eo
因此regmatch_t pmatch [1];成为regmatch_t pmatch [2];
和regexec(& regex,av [1],1,pmatch,0);成为regexec(& regex,av [1],2,pmatch,0);
谢谢 :)