我遇到了一个问题,其中我的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'。
正则表达式接受的示例:
答案 0 :(得分:0)
尝试盯着代码中的以下一两分钟,看看你是否能自己找出答案:
for (g = 0; g < 1; g++)
P.S。除了在for循环中递增g
之外,您还可以在循环体中递增它。所以,由于几个原因,这不会起作用。