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