Namespaces
Variants

std:: regex_match

From ru.cppreference.net
(Примечание: В данном фрагменте HTML отсутствует текстовое содержимое для перевода - присутствуют только HTML-теги и атрибуты, которые согласно инструкциям не подлежат переводу)
Определено в заголовочном файле <regex>
template < class BidirIt, class Alloc, class CharT, class Traits >

bool regex_match ( BidirIt first, BidirIt last,
std:: match_results < BidirIt, Alloc > & m,
const std:: basic_regex < CharT, Traits > & e,
std:: regex_constants :: match_flag_type flags =

std:: regex_constants :: match_default ) ;
(1) (начиная с C++11)
template < class BidirIt, class CharT, class Traits >

bool regex_match ( BidirIt first, BidirIt last,
const std:: basic_regex < CharT, Traits > & e,
std:: regex_constants :: match_flag_type flags =

std:: regex_constants :: match_default ) ;
(2) (начиная с C++11)
template < class CharT, class Alloc, class Traits >

bool regex_match ( const CharT * str,
std:: match_results < const CharT * , Alloc > & m,
const std:: basic_regex < CharT, Traits > & e,
std:: regex_constants :: match_flag_type flags =

std:: regex_constants :: match_default ) ;
(3) (начиная с C++11)
template < class CharT, class Traits >

bool regex_match ( const CharT * str, const std:: basic_regex < CharT, Traits > & e,
std:: regex_constants :: match_flag_type flags =

std:: regex_constants :: match_default ) ;
(4) (начиная с C++11)
template < class STraits, class SAlloc, class Alloc,

class CharT, class Traits >
bool regex_match
( const std:: basic_string < CharT, STraits, SAlloc > & s,
std:: match_results
< typename std:: basic_string < CharT, STraits, SAlloc > :: const_iterator ,
Alloc > & m,
const std:: basic_regex < CharT, Traits > & e,
std:: regex_constants :: match_flag_type flags =

std:: regex_constants :: match_default ) ;
(5) (начиная с C++11)
template < class STraits, class SAlloc, class CharT, class Traits >

bool regex_match ( const std:: basic_string < CharT, STraits, SAlloc > & s,
const std:: basic_regex < CharT, Traits > & e,
std:: regex_constants :: match_flag_type flags =

std:: regex_constants :: match_default ) ;
(6) (начиная с C++11)
template < class STraits, class SAlloc, class Alloc,

class CharT, class Traits >
bool regex_match
( const std:: basic_string < CharT, STraits, SAlloc > && ,
std:: match_results
< typename std:: basic_string < CharT, STraits, SAlloc > :: const_iterator ,
Alloc > & ,
const std:: basic_regex < CharT, Traits > & ,
std:: regex_constants :: match_flag_type flags =

std:: regex_constants :: match_default ) = delete ;
(7) (начиная с C++11)

Определяет, соответствует ли регулярное выражение e всей целевой последовательности символов. Подробный результат сопоставления сохраняется в m (если присутствует).

1,2) Целевая последовательность символов представлена диапазоном [ first , last ) .

Если BidirIt не удовлетворяет требованиям LegacyBidirectionalIterator , поведение не определено.

(until C++23)

Если BidirIt не моделирует bidirectional_iterator , поведение не определено.

(since C++23)
3,4) Целевая последовательность символов представлена диапазоном [ str , str + std:: char_traits < CharT > :: length ( str ) ) .
5,6) Целевая последовательность символов представлена строкой s .
7) Целевая последовательность символов не может быть представлена с помощью std::string rvalue.

Если совпадение не существует, следующие выражения с участием m (если существует) должны давать указанные значения:

Выражение Значение
m. ready ( ) true
m. size ( ) ​ 0 ​
m. empty ( ) true

Если совпадение существует, для любого целого числа в ( ​ 0 , m. size ( ) ) как n , следующие выражения с участием m должны давать указанные значения для каждой перегрузки, перечисленной ниже:

**Примечание:** Весь текст в данном HTML-фрагменте находится внутри тегов ``, которые содержат C++ код. Согласно инструкциям, C++ специфичные термины и код внутри таких тегов не переводятся. Поэтому весь фрагмент остается без изменений. **Примечание:** Весь текст в данном HTML-фрагменте находится внутри тегов ``, `
` или является C++ специфичными терминами (`m.prefix().second`), поэтому перевод не требуется согласно вашим инструкциям. HTML-структура и форматирование полностью сохранены.
**Примечание:** В данном фрагменте весь текст уже находится внутри тегов ``, `` и содержит исключительно C++ код и термины (suffix, matched, false), поэтому перевод не требуется и не выполнен в соответствии с указанными правилами. **Примечание:** В данном фрагменте HTML весь текст внутри тегов `` является C++ кодом, который согласно инструкциям не подлежит переводу. Остальной текст (кроме HTML-тегов и атрибутов) также представляет собой C++ синтаксис, поэтому перевод не требуется. **Примечание:** В данном фрагменте весь текст уже находится внутри тегов ``, `` или является C++ специфичными терминами (`m`, `[0]`, `matched`, `true`), поэтому перевод не требуется. HTML структура и атрибуты сохранены без изменений.
Выражение Значение
Перегрузка (1) Перегрузка (3) Перегрузка (5)
m. ready ( ) true
m. size ( ) 1 + e. mark_count ( )
m. empty ( ) false
m. prefix ( ) . first first str s. begin ( )
m. prefix ( ) . second
m. prefix ( ) . matched false [1]
m. suffix ( ) . first last std:: char_traits < CharT > ::
length ( str ) + str
s. end ( )
m. suffix ( ) . second
m. suffix ( ) . matched false [2]
m [0] . first first str s. begin ( )
m [0] . second last std:: char_traits < CharT > ::
length ( str ) + str
s. end ( )
m [0] . matched true [3]
m [n] . first
  • last если помеченное подвыражение n не участвовало в сопоставлении
  • начало последовательности в противном случае соответствующее подвыражение n в противном случае
m [n] . second
  • last если помеченное подвыражение n не участвовало в сопоставлении
  • конец последовательности в противном случае, соответствующее подвыражение n в противном случае
m [n] . matched
  1. ↑ Префикс совпадения пуст.
  2. ↑ Суффикс совпадения пуст.
  3. ↑ Вся последовательность совпадает.

Содержание

Параметры

first, last - целевой диапазон символов
str - целевая строка в стиле C с нулевым завершением
s - целевая std::basic_string
m - результаты сопоставления
e - регулярное выражение
flags - флаги, определяющие способ выполнения сопоставления

Возвращаемое значение

Возвращает true если вся целевая последовательность соответствует e , false в противном случае.

Примечания

Поскольку regex_match рассматривает только полные совпадения, одно и то же регулярное выражение может давать разные результаты между regex_match и std::regex_search :

std::regex re("Get|GetValue");
std::cmatch m;
std::regex_search("GetValue", m, re);  // возвращает true, и m[0] содержит "Get"
std::regex_match ("GetValue", m, re);  // возвращает true, и m[0] содержит "GetValue"
std::regex_search("GetValues", m, re); // возвращает true, и m[0] содержит "Get"
std::regex_match ("GetValues", m, re); // возвращает false

Пример

#include <cstddef>
#include <iostream>
#include <regex>
#include <string>
int main()
{
    // Простое сопоставление с регулярным выражением
    const std::string fnames[] = {"foo.txt", "bar.txt", "baz.dat", "zoidberg"};
    const std::regex txt_regex("[a-z]+\\.txt");
    for (const auto& fname : fnames)
        std::cout << fname << ": " << std::regex_match(fname, txt_regex) << '\n';
    // Извлечение подсовпадения
    const std::regex base_regex("([a-z]+)\\.txt");
    std::smatch base_match;
    for (const auto& fname : fnames)
        if (std::regex_match(fname, base_match, base_regex))
            // Первое sub_match - это вся строка; следующее
            // sub_match - это первое выражение в скобках.
            if (base_match.size() == 2)
            {
                std::ssub_match base_sub_match = base_match[1];
                std::string base = base_sub_match.str();
                std::cout << fname << " имеет основу " << base << '\n';
            }
    // Извлечение нескольких подсовпадений
    const std::regex pieces_regex("([a-z]+)\\.([a-z]+)");
    std::smatch pieces_match;
    for (const auto& fname : fnames)
        if (std::regex_match(fname, pieces_match, pieces_regex))
        {
            std::cout << fname << '\n';
            for (std::size_t i = 0; i < pieces_match.size(); ++i)
            {
                std::ssub_match sub_match = pieces_match[i];
                std::string piece = sub_match.str();
                std::cout << "  подсовпадение " << i << ": " << piece << '\n';
            }
        }
}

Вывод:

foo.txt: 1
bar.txt: 1
baz.dat: 0
zoidberg: 0
foo.txt имеет основу foo
bar.txt имеет основу bar
foo.txt
  подсовпадение 0: foo.txt
  подсовпадение 1: foo
  подсовпадение 2: txt
bar.txt
  подсовпадение 0: bar.txt
  подсовпадение 1: bar
  подсовпадение 2: txt
baz.dat
  подсовпадение 0: baz.dat
  подсовпадение 1: baz
  подсовпадение 2: dat

Отчёты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены задним числом к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 2205 C++11 n could be zero in the postcondition can only be positive
LWG 2273 C++11 it was unclear whether partial matches are considered only considers full matches
LWG 2329 C++11 overload (5) accepted basic_string rvalues,
which could result in dangling iterators
rejected via deleted overload (7)

Смотрите также

объект регулярного выражения
(шаблон класса)
идентифицирует одно совпадение регулярного выражения, включая все совпадения подвыражений
(шаблон класса)
пытается сопоставить регулярное выражение с любой частью последовательности символов
(шаблон функции)