2013-03-21 148 views
1

我有這個代碼匹配的IP地址模式。但它似乎沒有工作,我不知道爲什麼。它始終打印在終端上「不匹配」POSIX正則表達式不編譯

regex_t regex; 
    int reti; 
    char msgbuf[100]; 
    reti = regcomp(&regex, "^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$", 0); 
    if (reti) { 
     fprintf(stderr, "Could not compile regex\n"); 
     exit(1); 
    } 

    reti = regexec(&regex, "124.168.21.3", 0, NULL, 0); 
    if (!reti) { 
     puts("Match"); 
    } else if (reti == REG_NOMATCH) { 
     puts("No match"); 
    } else { 
     regerror(reti, &regex, msgbuf, sizeof(msgbuf)); 
     fprintf(stderr, "Regex match failed: %s\n", msgbuf); 
     exit(1); 
    } 
    regfree(&regex); 

任何想法?

回答

0

你應該逃避這些點。你可能不需要捕獲組。更換

"^([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})$" 

"^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$" 
+0

不,它並沒有解決問題,我在終端上仍然有一個「不匹配」的信息。 – TheForbidden 2013-03-21 09:17:42

1

我發現,其實我應該指定regcomp功能的CFLAGS領域REG_EXTENDED而不是0

+0

+1是的,看起來'{1,3}'沒有引起問題。 – 2013-03-21 09:29:11

+2

但你也必須按照我所示的方式逃跑,否則你也會匹配'124168213'。 – 2013-03-21 09:31:57