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

int match(char *reg, char *string)
{
    regex_t regex;
    int res;

    res = regcomp(&regex, reg, REG_EXTENDED);
    if (res)
    {
        fprintf(stderr, "Could not compile regex\n");
        return 1;
    }

    res = regexec(&regex, string, 0, NULL, 0);
    return res;
}

int main(void)
{
    char *regex = "^([[:alnum:]_-]{24}\\.[[:alnum:]_-]{6}\\.[[:alnum:]_-]{27}|mfa\\.[[:alnum:]_-]{84})$";
    char *key = "xxxxxxxxxxxxxxxxxxxxxxxx.xxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxx";

    if (match(regex, key) == 0) printf("Valid key!\n");
    else printf("Invalid key!\n");

    return 0;
}