基本上,我在我的C程序中使用以下模式(请参见Regular expression matching an infinite pattern):

^[0-9]( [0-9])*$

代码如下:
char *pattern = "^[0-9]( [0-9])*$";
regex_t regexCompiled;
int rc = regcomp(&regexCompiled, pattern, REG_EXTENDED);
if (rc != 0) {
    char msgbuf[100];
    regerror(rc, &regexCompiled, msgbuf, sizeof (msgbuf));
    fprintf(stderr, "Regex match failed: %s\n", msgbuf);
    exit(EXIT_FAILURE);
}

if (regexec(&regexCompiled, "0 1", 0, NULL, REG_EXTENDED) == 0) {
    printf("Valid\n");
} else {
    printf("Invalid\n");
}

其中,我对字符串“0 1”执行,该字符串对模式有效,但不起作用。“^”和“$”不起作用。为什么?我怎么才能让它工作呢?

最佳答案

您正在将REG_EXTENDED传递给regexec(),这不是该调用的有效标志。
The manual page说:
eflags可以是REG_NOTBOLREG_NOTEOL中的一个或两个的按位或,这导致下面描述的匹配行为的变化。
可能REG_EXTENDED的实际值与其中一个匹配。
将代码更改为传递0作为regexec()的最终参数使其匹配。

10-02 10:32