#include <stdio.h>
#include <regex.h>

void check_RE(char * r, regex_t RE)
{
    printf ("%s - %s\n", r, !regexec(&RE, r, 0, NULL, 0) ? "Match" : "No Match");
}


int main ()
{
    regex_t regex;
    int ret = regcomp(&regex, "^(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])(\\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}$", REG_EXTENDED);
    if(ret)
        printf("err1\n");

    char  RE_list[][32] = 
    {
        "0.0.0.0",
        "123.456.789.123",
        "a.b.c.d",
        "1.2.34.567",
        "1111.1.1.1",
        ".1.1.1",
        "1,1,1,1"
    };

    for(int i = 0; i < sizeof(RE_list) / sizeof(RE_list[0]); i++)
        check_RE(RE_list[i], regex);

    return 0;
}