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 フィールドを 0 ではなく REG_EXTENDED に指定する必要があります。

于 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 に答える