1

我有此代码用于匹配 IP 地址模式。但它似乎不起作用,我不知道为什么。它总是在终端上打印“不匹配”

    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);

任何想法?

4

2 回答 2

1

找到了,其实我应该把regcomp函数的cflags字段指定为REG_EXTENDED而不是0。

于 2013-03-21T09:26:58.070 回答
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}$"
于 2013-03-21T09:14:26.357 回答