Регулярное выражение dd.mm.yyyy на С?

Недавно начала изучать С и столкнулась с проблемой использования регулярного выражения для даты и не могу найти толкового описания как их правильно использовать.

Задумка такова:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[]) {
    //system("clear"); // очистка консоли
    char per_bth_date[200];
    printf("Введите дату рождения: ");
    scanf("%s", per_bth_date);

    if (per_bth_date != regex) {
        printf("error\n");
    } else if (per_bth_date == regex) {
        printf("good\n");
    } else{
        printf("full error\n");
    }

}


Где regex - переменная хранящая регулярное выражение / регулярное выражение

Необходима проверка на валидность ввода такого формата - dd.mm.yyyy
  • Вопрос задан
  • 366 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега C
Седой и строгий
Максимально упрощённый пример с использованием библиотеки 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;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы