[英]PCRE regex with multiples substrings
我想从此行中获取2个子字符串:
open(“ / etc / ld.so.cache”,O_RDONLY | O_CLOEXEC)= 3
在第一个中,我必须具有/etc/ld.so.cache
,在第二个中,必须具有/etc/ld.so.cache
。
所以我写了这个
int main()
{
char * line = "open(\"/etc/ld.so.cache\", O_RDONLY|O_CLOEXEC) = 3";
int rc;
size_t nmatch = 3;
regex_t reg;
regmatch_t pmatch[3];
char * regex = "open\(\"\\([^\"]*\\)\",[ ]\\([^\)]*\\)\).*";
rc = regcomp(®, regex, REG_NOSUB | REG_EXTENDED);
rc = regexec(®, line, nmatch, pmatch, 0);
if (!rc) {
printf("Matched substring \"%.*s\" is found at position %d to %d.\n",
pmatch[1].rm_eo - pmatch[1].rm_so, &line[pmatch[1].rm_so],
pmatch[1].rm_so, pmatch[1].rm_eo - 1);
}
regfree(®);
return 0;
}
但是它不会返回第一组。
你能告诉我我的正则表达式是否好吗?
几乎。 在POSIX正则表达式中,如果希望它们匹配自己,则必须转义括号和其他特殊字符,而不是访问其特殊功能,因此必须
char const * regex = "open\\(\"([^\"]*)\", *([^\\)]*)\\).*";
另外,如果要捕获,则必须在不使用REG_NOSUB
情况下编译正则表达式:
rc = regcomp(®, regex, REG_EXTENDED);
...而此时printf
可能会对您进行隔离; 参数与格式字符串不匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.