Библиотека регулярных выражений (начиная с C++11)
Библиотека регулярных выражений предоставляет класс, представляющий регулярные выражения, которые являются своего рода мини-языком, используемым для выполнения сопоставления с образцом в строках. Почти все операции с регулярными выражениями могут быть осуществлены посредством следующих объектов:
- Целевая последовательность. Последовательность символов, в которой выполняется поиск шаблона. Это может быть диапазон, заданный двумя итераторами, символьная строка с завершающим нулём или std::string.
- Шаблон. Это само регулярное выражение. Оно определяет, что составляет соответствие. Это объект типа std::basic_regex, созданный из строки со специальным синтаксисом. Смотрите regex_constants::syntax_option_type для описания поддерживаемых вариантов синтаксиса.
- Массив совпадений. Информация о совпадениях может быть получена как объект типа std::match_results.
- Строка замены. Это строка, которая определяет, как заменить совпадения, regex_constants::match_flag_type для описания поддерживаемых вариантов синтаксиса.
Содержание |
[править] Основные классы
Эти классы инкапсулируют регулярное выражение и результаты сопоставления регулярного выражения в целевой последовательности символов.
(C++11) |
объект регулярного выражения (шаблон класса) |
(C++11) |
определяет последовательность символов, совпадающих с подвыражением (шаблон класса) |
(C++11) |
идентифицирует одно совпадение регулярного выражения, включая все совпадения подвыражений (шаблон класса) |
[править] Алгоритмы
Эти функции используются для применения регулярного выражения, инкапсулированного в regex, к целевой последовательности символов.
(C++11) |
пытается сопоставить регулярное выражение всей последовательности символов (шаблон функции) |
(C++11) |
пытается сопоставить регулярное выражение любой части последовательности символов (шаблон функции) |
(C++11) |
заменяет вхождения регулярного выражения форматированным замещающим текстом (шаблон функции) |
[править] Итераторы
Итераторы регулярных выражений используются для просмотра всего набора совпадений с регулярным выражением, найденных в последовательности.
(C++11) |
перебирает все совпадения регулярного выражения в последовательности символов (шаблон класса) |
(C++11) |
перебирает указанные подвыражения во всех совпадениях с регулярным выражением в заданной строк�� или несовпавшим подстрокам (шаблон класса) |
[править] Исключения
Этот класс определяет тип объектов, выбрасываемых как исключения для сообщения об ошибках из библиотеки регулярных выражений.
(C++11) |
сообщает об ошибках, сгенерированных библиотекой регулярных выражений (класс) |
[править] Свойства
Класс свойств регулярного выражения используется для инкапсуляции локализуемых аспектов регулярного выражения.
(C++11) |
предоставляет метаинформацию о типе символов, требуемую библиотекой регулярных выражений (шаблон класса) |
[править] Константы
Определены в пространстве имён
std::regex_constants | |
(C++11) |
общие параметры, управляющие поведением регулярных выражений (определение типа) |
(C++11) |
параметры, специфичные для сопоставления (определение типа) |
(C++11) |
описывает различные типы ошибок сопоставления (определение типа) |
[править] Пример
#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 символов: Некоторые столкнувшись проблемой использовать регулярные выражения проблемы [Некоторые] люди, [столкнувшись] с [проблемой], думают: "Я знаю, я буду [использовать] [регулярные] [выражения]." Теперь у них есть две [проблемы].