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

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