gpt4 book ai didi

java - regexec 未返回所有预期的匹配项

转载 作者:行者123 更新时间:2023-11-30 17:08:20 25 4
gpt4 key购买 nike

我遇到了一个问题,其中我的 regexec 代码返回的结果与 Java 代码不同。我使用了相同的正则表达式,但在 c++/c 中返回不同。

这是我的代码片段:

const char *pattern = "(%\\(.*?\\)|\\%[ds])";
if ((ret = regcomp(&regEx, pattern, REG_EXTENDED )) != 0)
printf ("%d error on regex..\n", ret);

while (1)
{
if(regexec(&regEx, 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(&regEx);

实际返回数据(C/C++):

  • 结果:%(04up16)-%(02up8)-%(02up8) %(02up8):%(02up8)%(ip16) (0)
  • 结果:%(04up16)-%(02up8)-%(02up8) %(02up8):%(02up8)%(ip16) (1)

预期(Java):

  • 结果:%(04up16)-%(02up8)-%(02up8) %(02up8):%(02up8)%(ip16)
  • 结果:%(04up16)
  • 结果:%(02up8)
  • 结果:%(02up8)
  • 结果:%(02up8)
  • 结果:%(02up8)
  • 结果:%(ip16)

将模式更改为:

        const char *pattern = (\\%\\(.*?\\)|\\%[ds]);

返回不同:

  • 结果:%(04up16)-%(02up8)-%(02up8) %(02up8):%(02up8)%(ip16) - 0
  • 结果:%(04up16)-%(02up8)-%(02up8) %(02up8):%(02up8)%(ip16) - 1

顺便说一下,在 java 中使用模式/正则表达式都返回正常。这意味着它正确返回所有匹配项。我的正则表达式有问题吗?任何人都可以帮助我如何构建 posix 的正则表达式以获得下面的预期结果? % 后面应该跟“(”,然后跟任何字符并以“)”结束,或者 % 后面应该跟“s”或“d”。

正则表达式接受的示例:

  • %d %s %(02up8) %(ip16) %(d32) %(X8)

最佳答案

尝试盯着代码中的以下行一两分钟,看看您是否可以自己找出答案:

for (g = 0; g < 1; g++)

附注除了在 for 循环本身中递增 g 之外,您还可以在循环体中递增它。因此,由于多种原因,这不会起作用。

关于java - regexec 未返回所有预期的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33708814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com