次のコードは、私が取り組んでいる大規模なプロジェクトの一部のスタンドアロン テストとして作成したものです。IPv4 アドレスを 4 つの形式 (ピリオドで区切られた最大 3 桁の数字 4 つ) で検出することになっています。
#include <stdlib.h>
#include <stdio.h>
#include <regex.h>
#include <sys/types.h>
int main (int argc, char * argv []) {
   regex_t regex;
    int ret;
    char * reg = "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$";
    ret = regcomp(& regex, reg, REG_NEWLINE | REG_EXTENDED);
    if (ret) {
            printf("no compile\n");
    } else {
            printf("compile\n");
    }
    char ips [17];
    fgets(ips, 17, stdin);
    ret = regexec(& regex, ips, 0, NULL, 0);
    if (! ret) {
            printf("match\n");
    } else {
            printf("no match\n");
    }
    return 0;
}
「1111111」と入力して Enter キーを押すと、「y」が出力されます。これは正しくないようです。
$ [name of compiled file]
comp
11111111
y
$ 
また、1 の長い文字列にも一致します。私は10時を過ぎていません。