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

问题描述 投票:0回答:1

基本上我在我的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”,这对模式有效,但不起作用。 '^'和'$'无效。这是为什么?我怎样才能让它发挥作用?

c regex posix
1个回答
2
投票

您将REG_EXTENDED传递给regexec(),这不是该呼叫的有效标志。

The manual page说:

eflags可以是REG_NOTBOLREG_NOTEOL中的一个或两个的按位或者两者,其引起下面描述的匹配行为的改变。

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

更改代码以将0作为regexec()的最终参数传递使其匹配。

© www.soinside.com 2019 - 2024. All rights reserved.