Максимально упрощённый пример с использованием библиотеки PCRE
#include <stdio.h>
#include <string.h>
#include <pcre.h>
#define DATE_SIZE 11
int main(int argc, char* argv[]) {
pcre *pattern;
const char *error_str;
int error_offset;
int matches[1];
pattern = pcre_compile("^\\d{2}\\.\\d{2}\\.\\d{4}$", 0, &error_str, &error_offset, NULL);
if(pattern == NULL) {
printf("Could not compile: %s\n", error_str);
return 1;
}
char str[DATE_SIZE];
fgets(str, DATE_SIZE, stdin);
int r = pcre_exec(pattern, NULL, str, strlen(str), 0, 0, matches, 1);
pcre_free(pattern);
if (r < 0)
puts("Invalid date");
else
puts("Valid date");
return EXIT_SUCCESS;
}