Namespaces
Variants

std:: regex_search

From cppreference.net
Определено в заголовочном файле <regex>
template < class BidirIt, class Alloc, class CharT, class Traits >

bool regex_search ( 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_search ( 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_search ( 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_search ( 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_search
( 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_search ( 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_search
( 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++ кодом (находятся внутри тегов ` `), поэтому перевод не требуется согласно указанным правилам. HTML структура и форматирование полностью сохранены. **Примечание:** В данном фрагменте весь текст находится внутри тегов ` `, которые содержат C++ код. Согласно инструкциям, текст внутри таких тегов не подлежит переводу, так как это C++ специфические термины и код. Поэтому перевод не требуется, исходный 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 [ 0 ] . first
m. prefix ( ) . matched m. prefix ( ) . first ! = m. prefix ( ) . second
m. suffix ( ) . first m [ 0 ] . second
m. suffix ( ) . second last std:: char_traits < CharT > ::
length ( str ) + str
s. end ( )
m. suffix ( ) . matched m. suffix ( ) . first ! = m. suffix ( ) . second
m [0] . first начало последовательности, которая совпала e
m [0] . second конец последовательности, которая совпала e
m [0] . matched true
m [n] . first
  • last если помеченное подвыражение n не участвовало в сопоставлении
  • начало последовательности в противном случае соответствующее подвыражение n в противном случае
m [n] . second
  • last если помеченное подвыражение n не участвовало в сопоставлении
  • конец последовательности в противном случае, соответствующее подвыражение n в противном случае
m [n] . matched

Содержание

Параметры

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

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

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

Примечания

Для просмотра всех совпадений в целевой последовательности, std::regex_search может вызываться в цикле, каждый раз начиная с m [ 0 ] . second предыдущего вызова. std::regex_iterator предоставляет удобный интерфейс для этой итерации.

Пример

#include <cstddef>
#include <iostream>
#include <regex>
#include <string>
int main()
{
    std::string lines[] = {"Roses are #ff0000",
                           "violets are #0000ff",
                           "all of my base are belong to you"};
    std::regex color_regex("#([a-f0-9]{2})"
                            "([a-f0-9]{2})"
                            "([a-f0-9]{2})");
    // простое сопоставление
    for (const auto& line : lines)
        std::cout << line << ": " << std::boolalpha
                  << std::regex_search(line, color_regex) << '\n';
    std::cout << '\n';
    // показать содержимое помеченных подвыражений в каждом совпадении
    std::smatch color_match;
    for (const auto& line : lines)
        if (std::regex_search(line, color_match, color_regex))
        {
            std::cout << "совпадения для '" << line << "'\n";
            std::cout << "Префикс: '" << color_match.prefix() << "'\n";
            for (std::size_t i = 0; i < color_match.size(); ++i) 
                std::cout << i << ": " << color_match[i] << '\n';
            std::cout << "Суффикс: '" << color_match.suffix() << "\'\n\n";
        }
    // повторный поиск (см. также std::regex_iterator)
    std::string log(R"(
        Speed:	366
        Mass:	35
        Speed:	378
        Mass:	32
        Speed:	400
	Mass:	30)");
    std::regex r(R"(Speed:\t\d*)");
    for (std::smatch sm; regex_search(log, sm, r);)
    {
        std::cout << sm.str() << '\n';
        log = sm.suffix();
    }
    // демонстрация с C-style строками
    std::cmatch cm;
    if (std::regex_search("this is a test", cm, std::regex("test"))) 
        std::cout << "\nНайдено " << cm[0] << " на позиции "
                  << cm.prefix().length() << '\n';
}

Вывод:

Roses are #ff0000: true
violets are #0000ff: true
all of my base are belong to you: false
совпадения для 'Roses are #ff0000'
Префикс: 'Roses are '
0: #ff0000
1: ff
2: 00
3: 00
Суффикс: ''
совпадения для 'violets are #0000ff'
Префикс: 'violets are '
0: #0000ff
1: 00
2: 00
3: ff
Суффикс: ''
Speed:	366
Speed:	378
Speed:	400
Найдено test на позиции 10

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

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам 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 2329 C++11 overload (5) accepted basic_string rvalues,
which could result in dangling iterators
rejected via deleted overload (7)

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

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