[英]regexec did not return all expected matches
我遇到了一个问题,我的regexec代码返回的代码与Java代码不同。 我使用了相同的正则表达式,但在c ++ / c中返回的结果不同。
这是我的代码段:
const char *pattern = "(%\\(.*?\\)|\\%[ds])";
if ((ret = regcomp(®Ex, pattern, REG_EXTENDED )) != 0)
printf ("%d error on regex..\n", ret);
while (1)
{
if(regexec(®Ex, cursor, maxGroups, grpArray, REG_NOTBOL)){
break; // No more matches
}
unsigned int g = 0;
unsigned int offset = 0;
for (g = 0; g < 1; g++)
{
if (grpArray[g].rm_so == (size_t)-1)
{
break; // No more groups
}
char result[strlen(src) + 1];
if (g == 0)
offset = grpArray[g].rm_eo;
char cursorCopy[strlen(cursor) + 1];
strcpy(cursorCopy, cursor);
cursorCopy[grpArray[g].rm_eo] = 0;
parseFormatSpecifier(strResult);
g++;
}
cursor += offset;
//memset(&grpArray[0], 0, sizeof(grpArray));
}
regfree(®Ex);
实际返回数据(C / C ++):
预期的(Java):
将模式更改为:
const char *pattern = (\\%\\(.*?\\)|\\%[ds]);
返回不同:
顺便说一句,在Java中同时使用两种模式/正则表达式都很好。 表示它正确返回所有匹配项。 我的正则表达式有问题吗? 任何人都可以帮助我如何为posix构造正则表达式以达到以下预期结果? %应该后面跟有“(”,然后是任何字符,并以“)”结尾,或者%应该跟有“ s”或“ d”。
正则表达式可以接受的示例:
尝试凝视代码中的以下行,请等待一两分钟,以查看是否可以自己找出答案:
for (g = 0; g < 1; g++)
PS除了在for循环本身中增加g
之外,您还需要在循环体内将其增加。 因此,由于多种原因,这将无法正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.