为什么正则表达式总是返回1?

abc*_*xyz 11 c regex

以下函数检查变量名称是否以字母开头,并且可能具有字母/数字的前面的字符.无论输入是什么,为什么返回值始终为1?

#include <regex.h>
#include <stdio.h>

int validate_var(char *str)
{
    regex_t reg;
    regcomp(&reg, "^[a-zA-Z]+[a-zA-Z0-9]*$", 0);
    int r = regexec(&reg, str, 0, NULL, 0);
    regfree(&reg);

    return r;
}

int main() {
    printf("%d\n", validate_var("abc")); // Reports 1, This makes sense
    printf("%d\n", validate_var("17"));  // Reports 1, This doesn't make sense
}
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 9

您正在使用锚点(^$)但不通过传递REG_EXTENDED来启用扩展语法regcomp().请参见手册页.

您应该检查所有返回值,由于语法使用错误,应该在某处报告失败.

请注意,非零意味着失败.

  • 显然,OP认为"1"意味着成功. (2认同)