开始(^)和结束($)锚不起作用

时间:2019-02-27 09:30:39

标签: c regex posix

基本上,我在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”执行的地方,该字符串对模式有效,并且不起作用。 '^'和'$'不起作用。这是为什么?以及如何使它起作用?

1 个答案:

答案 0 :(得分:2)

您正在将REG_EXTENDED传递给regexec(),这对于该呼叫来说不是有效的标志。

The manual page说:

  

标志可能是REG_NOTBOLREG_NOTEOL之一或两者的按位或,这会导致以下所述的匹配行为发生变化。

REG_EXTENDED的实际值可能与其中之一匹配。

更改代码以将0作为regexec()的最后一个参数进行传递。