Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么正则表达式总是返回1?_C_Regex - Fatal编程技术网

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

C 为什么正则表达式总是返回1?,c,regex,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);

下面的函数检查变量名是否以字母开头,并且前面的字符可能是字母/数字。为什么不管输入是什么,返回值总是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
}
#包括
#包括
int validate_var(char*str)
{
regex_t reg;
regcomp(®,“^[a-zA-Z]+[a-zA-Z0-9]*$”,0);
int r=regexec(®,str,0,NULL,0);
regfree(®);
返回r;
}
int main(){
printf(“%d\n”,validate_var(“abc”);//报告1,这很有意义
printf(“%d\n”,validate_var(“17”);//报告1,这没有意义
}
您正在使用锚(
^
$
)但未通过将
REG\u extended
传递到
regcomp()
来启用扩展语法

您应该检查所有的返回值,因为语法使用错误,应该在某个地方报告了一个失败


请注意,非零表示失败。

如我所述,它是一个表示变量名的字符串。我指的是内容。例如,
nul
终止了吗?您是如何构建/创建
str
的内容的?@abcxyz:一般来说,给出一个完整的测试用例,可以用于代码。我已经在问题中包含了这一点。“通常,regexec()返回0表示成功,非零代码REG__NOMATCH表示失败。其他非零错误代码可能在异常情况下返回;”OP显然认为
1
意味着成功。要完成解卷的答案,
regcomp()
如果成功,应始终返回
0
。检查这个。你能给我讲几句关于
REG\u EXTENDED
的话吗?什么时候应该使用?@iharob,我实际上知道
0
是成功的,否则failure或not-found.regcomp在本例中返回0。它的regexec返回错误。