C regexec找不到使用简单贪婪正则表达式的最长匹配项

时间:2018-10-07 17:59:30

标签: c regex posix glibc regex-greedy

我正在尝试将m*immunity中的两个“ m”匹配。我阅读了POSIX regex.h联机帮助页,并写了以下内容:

#include <stdio.h>
#include <regex.h>

#define DIE(condition, msg) do { \
  if (condition) { \
    puts(msg); \
    return 1; \
  } \
} while (0)

int main(void) {
  regex_t preg;
  regmatch_t match;
  DIE (regcomp(&preg, "m*", REG_EXTENDED), "Failed to compile regex.");
  DIE (regexec(&preg, "immunity", 1, &match, 0), "No regex match found");
  printf("Match starts at %d and ends at %d.", match.rm_so, match.rm_eo);
  return 0;
}

regexec报告匹配项(返回0),但是rm_sorm_eo都等于0。而此匹配项(空字符串恰好在开头),联机帮助页暗示始终将首先返回最长的匹配,在这种情况下应返回1和3。当我将正则表达式更改为m+时,它可以正常工作(1、3,而不是1、2,这意味着它很贪婪)。这是怎么回事?

0 个答案:

没有答案