2015-04-23 85 views
10

以下函数检查变量名是否以字母开头并且可能有前面的字母/数字。为什么无论输入是什么,返回值总是1?为什么正则表达式总是返回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 
} 
+2

什么是'str'?... – Maroun

+0

正如我所提到的,它是一个代表变量名的字符串。 – abcxyz

+2

我的意思是内容是什么。 – Maroun

回答

8

您使用的锚(^$),而不是通过传递REG_EXTENDEDregcomp()启用扩展语法。 See the manual page

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

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

+2

显然OP认为'1'表示成功。 –

+0

为了完成展开的答案,如果成功,'regcomp()'应该总是返回'0'。选中此链接(http://pubs.opengroup.org/onlinepubs/009695399/functions/regcomp.html)。 – Amessihel

+0

你可以提一下关于'REG_EXTENDED'的几句话吗?何时使用? – abcxyz

相关问题