2015-04-23 135 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

相關問題