C 为什么正则表达式总是返回1?
下面的函数检查变量名是否以字母开头,并且前面的字符可能是字母/数字。为什么不管输入是什么,返回值总是1C 为什么正则表达式总是返回1?,c,regex,C,Regex,下面的函数检查变量名是否以字母开头,并且前面的字符可能是字母/数字。为什么不管输入是什么,返回值总是1 #include <regex.h> #include <stdio.h> int validate_var(char *str) { regex_t reg; regcomp(®, "^[a-zA-Z]+[a-zA-Z0-9]*$", 0); int r = regexec(®, str, 0, NULL, 0);
#include <regex.h>
#include <stdio.h>
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(®);
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返回错误。