繁体   English   中英

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

[英]regexec did not return all expected matches

我遇到了一个问题,我的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)%(d3​​2)%(X8)

尝试凝视代码中的以下行,请等待一两分钟,以查看是否可以自己找出答案:

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

PS除了在for循环本身中增加g之外,您还需要在循环体内将其增加。 因此,由于多种原因,这将无法正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM