Библиотека регулярных выражений (с 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) | заменяет вхождения регулярного выражения отформатированным текстом замены (шаблон функции) |
Итераторы
Итераторы regex используются для обхода всего набора совпадений регулярного выражения, найденных в последовательности.
|
(C++11) | перебирает все совпадения regex в последовательности символов (шаблон класса) |
|
(C++11) | перебирает указанные подвыражения в рамках всех совпадений regex в заданной строке или несовпадающие подстроки (шаблон класса) |
Исключения
Этот класс определяет тип объектов, выбрасываемых в виде исключений, для сообщения об ошибках из библиотеки регулярных выражений.
|
(C++11) | сообщает об ошибках, сгенерированных библиотекой регулярных выражений (класс) |
Свойства
Класс regex traits используется для инкапсуляции локализуемых аспектов regex.
|
(C++11) | предоставляет метаинформацию о типе символов, необходимой для библиотеки regex (шаблон класса) |
Константы
Определено в пространстве имен std::regex_constants |
|
|---|---|
|
(C++11) | общие параметры, управляющие поведением regex (typedef) |
|
(C++11) | параметры, специфичные для сопоставления (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].
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/regex