Функция regex_match(): проверка полного соответствия шаблону

Выполнить проверку полного соответствия строки шаблону регулярного выражения позволяет функция regex_match(). Функция возвращает значение true, если строка полностью соответствует шаблону, и значение false — в противном случае. При использовании функции regex_match() проверяется полное соответствие с шаблоном, поэтому привязки в началу (символ ^) и концу (символ $) строки можно не указывать. Основные прототипы функции regex_match() (полный список смотрите в документации):

template<typename _Ch_type, class _Rx_traits>
   bool regex_match(const _Ch_type *cstr,
                    const basic_regex<_Ch_type, _Rx_traits> &re,
                    match_flag_type flags=match_default);
template<typename _Ch_traits, typename _Str_allocator,
         typename _Ch_type, typename _Rx_traits>
   bool regex_match(
      const basic_string<_Ch_type, _Ch_traits, _Str_allocator> &str,
      const basic_regex<_Ch_type, _Rx_traits> &re,
      match_flag_type flags=match_default);
template<typename _Bi_iter, typename _Ch_type, typename _Rx_traits>
   bool regex_match(_Bi_iter first, _Bi_iter last,
                    const basic_regex<_Ch_type, _Rx_traits> &re,
                    match_flag_type flags=match_default);
template<typename _Ch_type, typename _Alloc, typename _Rx_traits>
   bool regex_match(const _Ch_type *cstr,
                    match_results<const _Ch_type*, _Alloc> &match,
                    const basic_regex<_Ch_type, _Rx_traits> &re,
                    match_flag_type flags=match_default);
template<typename _Ch_traits, typename _Ch_alloc,
         typename _Alloc, typename _Ch_type, typename _Rx_traits>
   bool regex_match(
      const basic_string<_Ch_type, _Ch_traits, _Ch_alloc> &str,
      match_results<typename basic_string<_Ch_type,
               _Ch_traits, _Ch_alloc>::const_iterator, _Alloc> &match,
      const basic_regex<_Ch_type, _Rx_traits> &re,
      match_flag_type flags=match_default);

В параметре cstr указывается C-строка, в которой выполняется поиск, а в параметре str вместо C-строки можно указать объект класса basic_string. Задать фрагмент для поиска можно также с помощью итераторов first и last. Параметр re задает шаблон регулярного выражения. Пример проверки:

std::regex rgx("[0-9]+");
if (std::regex_match("123456", rgx))
   std::cout << "Строка соответствует шаблону" << std::endl;
else
   std::cout << "Не соответствует" << std::endl;

Если указать параметр match, то станет доступной дополнительная информация о совпадении с шаблоном в виде объекта класса match_results (см. разд. 10.5). Проверим адрес электронной почты на соответствие шаблону и получим отдельно имя пользователя и название сайта:

std::regex::flag_type flags =
            std::regex::icase | std::regex::ECMAScript;
std::regex rgx(
     "([a-z0-9_.-]+)@((?:[a-z0-9-]+\\.)+[a-z]{2,6})", flags);
std::string str("user@mail.ru");
std::smatch m;
if (std::regex_match(str, m, rgx)) {
   std::cout << "E-mail соответствует шаблону" << std::endl;
   std::cout << m.str(1) << std::endl;   // user
   std::cout << m.str(2) << std::endl;   // mail.ru
}

В параметре flags можно указать следующие флаги или их комбинацию через оператор |:

std::regex_constants::match_default
std::regex_constants::match_not_bol
std::regex_constants::match_not_eol
std::regex_constants::match_not_bow
std::regex_constants::match_not_eow
std::regex_constants::match_not_null
std::regex_constants::match_any
std::regex_constants::match_continuous
std::regex_constants::match_prev_avail

Пример отмены совпадения с началом и концом слова (отмена класса \b):

std::regex_constants::match_flag_type flags =
            std::regex_constants::match_not_bow |
            std::regex_constants::match_not_eow;

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов