2015-04-23 26 views
10

Chức năng sau sẽ kiểm tra xem tên biến có bắt đầu bằng một chữ cái và có thể có các ký tự trước đó là chữ cái/số hay không. Tại sao giá trị trả về luôn luôn là 1 bất kể đầu vào là gì?Tại sao regex luôn trả về 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

Có gì 'str'? ... – Maroun

+0

Như tôi đã đề cập, đó là một chuỗi đại diện cho tên biến. – abcxyz

+2

Tôi muốn nói nội dung là gì. – Maroun

Trả lời

8

Bạn đang sử dụng neo (^$) nhưng không cho phép cú pháp mở rộng bằng cách thông qua REG_EXTENDED để regcomp(). See the manual page.

Bạn thực sự nên kiểm tra tất cả các giá trị trả lại, sẽ có một lỗi được báo cáo ở đâu đó do lỗi sử dụng cú pháp.

Lưu ý rằng khác không có nghĩa là lỗi.

+2

Và dường như OP nghĩ rằng '1' có nghĩa là thành công. –

+0

Để hoàn thành câu trả lời của thư giãn, 'regcomp()' phải luôn trả về '0' nếu thành công. Kiểm tra [link] này (http://pubs.opengroup.org/onlinepubs/009695399/functions/regcomp.html). – Amessihel

+0

Bạn có thể đưa ra một vài từ về 'REG_EXTENDED'? Khi nào được sử dụng? – abcxyz

Các vấn đề liên quan