Namespaces
Variants

Regular expressions library (since C++11)

From cppreference.net

Библиотека регулярных выражений предоставляет класс, представляющий регулярные выражения , которые представляют собой мини-язык для выполнения сопоставления с образцом в строках. Почти все операции с regex можно охарактеризовать работой со следующими объектами:

  • Целевая последовательность . Символьная последовательность, в которой выполняется поиск шаблона. Это может быть диапазон, заданный двумя итераторами, строка символов с нулевым завершением или std::string .
  • Шаблон . Это само регулярное выражение. Оно определяет, что считается совпадением. Это объект типа std::basic_regex , созданный из строки со специальной грамматикой .
  • Сопоставленный массив . Информация о сопоставлениях может быть получена в виде объекта типа std::match_results .
  • Строка замены . Это строка, которая определяет, как заменять совпадения.

Содержание

Грамматики регулярных выражений

Шаблоны и строки замены поддерживают следующие грамматики регулярных выражений:

Некоторые грамматические вариации (такие как регистронезависимое сопоставление) также доступны, подробности смотрите на этой странице .

Основные классы

Эти классы инкапсулируют регулярное выражение и результаты сопоставления регулярного выражения с целевой последовательностью символов.

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

Алгоритмы

Эти функции используются для применения регулярного выражения, инкапсулированного в regex, к целевой последовательности символов.

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

Итераторы

Регулярные итераторы используются для обхода всего набора совпадений регулярных выражений, найденных в последовательности.

выполняет итерацию по всем совпадениям регулярного выражения в последовательности символов
(class template)
выполняет итерацию по указанным подвыражениям во всех совпадениях регулярного выражения в заданной строке или по неподходящим подстрокам
(class template)

Исключения

Этот класс определяет тип объектов, выбрасываемых в качестве исключений для сообщения об ошибках из библиотеки регулярных выражений.

сообщает об ошибках, генерируемых библиотекой регулярных выражений
(класс)

Трейты

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

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

Константы

Определено в пространстве имен std::regex_constants
общие опции, управляющие поведением регулярных выражений
(typedef)
опции, специфичные для сопоставления
(typedef)
(C++11)
описывает различные типы ошибок сопоставления
(typedef)

Пример

#include <iostream>
#include <iterator>
#include <regex>
#include <string>
int main()
{
    std::string s = "Some people, when confronted with a problem, think "
        "\"I know, I'll use regular expressions.\" "
        "Now they have two problems.";
    std::regex self_regex("REGULAR EXPRESSIONS",
        std::regex_constants::ECMAScript | std::regex_constants::icase);
    if (std::regex_search(s, self_regex))
        std::cout << "Text contains the phrase 'regular expressions'\n";
    std::regex word_regex("(\\w+)");
    auto words_begin = 
        std::sregex_iterator(s.begin(), s.end(), word_regex);
    auto words_end = std::sregex_iterator();
    std::cout << "Found "
              << std::distance(words_begin, words_end)
              << " words\n";
    const int N = 6;
    std::cout << "Words longer than " << N << " characters:\n";
    for (std::sregex_iterator i = words_begin; i != words_end; ++i)
    {
        std::smatch match = *i;
        std::string match_str = match.str();
        if (match_str.size() > N)
            std::cout << "  " << match_str << '\n';
    }
    std::regex long_word_regex("(\\w{7,})");
    std::string new_s = std::regex_replace(s, long_word_regex, "[$&]");
    std::cout << new_s << '\n';
}

Вывод:

Text contains the phrase 'regular expressions'
Found 20 words
Words longer than 6 characters:
  confronted
  problem
  regular
  expressions
  problems
Some people, when [confronted] with a [problem], think 
"I know, I'll use [regular] [expressions]." Now they have two [problems].