首页 > 解决方案 > 开始 (^) 和结束 ($) 锚点不起作用

问题描述

基本上我在我的 C 程序中使用以下模式(请参阅正则表达式匹配无限模式):

^[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”执行的地方,这对模式有效,但它不起作用。'^' 和 '$' 不起作用。这是为什么?我怎样才能让它工作?

标签: cregexposix

解决方案


您正在传递REG_EXTENDEDregexec(),这不是该调用的有效标志。

手册页说:

eflags 可能是其中之一或两者的按位或,REG_NOTBOLREG_NOTEOL会导致下面描述的匹配行为发生变化。

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

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


推荐阅读