Пространства имён
Варианты
Действия

Библиотека регулярных выражений (начиная с C++11)

Материал из cppreference.com
< cpp
 
 
Библиотека регулярных выражений
Классы
(C++11)
Алгоритмы
Итераторы
Исключения
Типы
Константы
(C++11)
Грамматика регулярных выражений
 

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

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

Содержание

[править] Основные классы

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

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

[править] Алгоритмы

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

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

[править] Итераторы

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

перебирает все совпадения регулярного выражения в последовательности символов
(шаблон класса) [править]
перебирает указанные подвыражения во всех совпадениях с регулярным выражением в заданной строк�� или несовпавшим подстрокам
(шаблон класса) [править]

[править] Исключения

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

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

[править] Свойства

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

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

[править] Константы

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

[править] Пример

#include <iostream>
#include <iterator>
#include <string>
#include <regex>
 
int main()
{
    std::string s = "Некоторые люди, столкнувшись с проблемой, думают: "
        "\"Я знаю, я буду использовать регулярные выражения.\" "
        "Теперь у них есть две проблемы.";
 
    std::regex self_regex("РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ",
            std::regex_constants::ECMAScript | std::regex_constants::icase);
    if (std::regex_search(s, self_regex)) {
        std::cout << "Текст содержащий фразу 'регулярные выражения'\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 << "Найдено "
              << std::distance(words_begin, words_end)
              << " слов\n";
 
    const int N = 6;
    std::cout << "Слова длиннее " << N << " символов:\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';
}

Вывод:

Текст содержащий фразу 'регулярные выражения'
Найдено 19 слов
Слова длиннее 6 символов:
  Некоторые
  столкнувшись
  проблемой
  использовать
  регулярные
  выражения
  проблемы
[Некоторые] люди, [столкнувшись] с [проблемой], думают: 
"Я знаю, я буду [использовать] [регулярные] [выражения]."
Теперь у них есть две [проблемы].