如何用正则表达式捕获一个组?
发布时间:2020-12-14 06:34:23 所属栏目:百科 来源:网络整理
导读:我试图从另一个使用正则表达式提取一个字符串。 我正在使用POSIX正则表达式函数(regcomp,regexec …),我在捕获组时失败… 例如,让模式像“MAIL FROM:(。*)”一样简单。 (用REG_EXTENDED cflags) 我想捕捉’'之间的所有内容和'‘ 我的问题是regmatch_t给
我试图从另一个使用正则表达式提取一个字符串。
我正在使用POSIX正则表达式函数(regcomp,regexec …),我在捕获组时失败… 例如,让模式像“MAIL FROM:<(。*)>”一样简单。 我想捕捉’<'之间的所有内容和'>‘ 我的问题是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 errorn"); 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数组的第0个元素将包含匹配的整个字符串的边界,如您所注意到的那样。在您的示例中,您对索引1的regmatch_t感兴趣,而不是在索引0处,以便通过子表达式获取有关字符串匹配的信息。
如果您需要更多帮助,请尝试编辑您的问题以包含实际的小代码示例,以便人们可以更轻松地找到问题。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |