Библиотека регулярных выражений (начиная с 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"; constint 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 символов: Некоторые столкнувшись проблемой использовать регулярные выражения проблемы [Некоторые] люди, [столкнувшись] с [проблемой], думают: "Я знаю, я буду [использовать] [регулярные] [выражения]." Теперь у них есть две [проблемы].