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

std::regex_constants::syntax_option_type

Материал из cppreference.com
< cpp‎ | regex

 
 
Библиотека регулярных выражений
Классы
(C++11)
Алгоритмы
Итераторы
Исключения
Типы
Константы
syntax_option_type
(C++11)
(C++11)
Грамматика регулярных выражений
 
Определено в заголовочном файле <regex>
typedef/*unspecified*/ syntax_option_type;

staticconstexpr syntax_option_type icase =/*unspecified*/;
staticconstexpr syntax_option_type nosubs =/*unspecified*/;
staticconstexpr syntax_option_type optimize =/*unspecified*/;
staticconstexpr syntax_option_type collate =/*unspecified*/;
staticconstexpr syntax_option_type ECMAScript =/*unspecified*/;
staticconstexpr syntax_option_type basic =/*unspecified*/;
staticconstexpr syntax_option_type extended =/*unspecified*/;
staticconstexpr syntax_option_type awk =/*unspecified*/;
staticconstexpr syntax_option_type grep =/*unspecified*/;

staticconstexpr syntax_option_type egrep =/*unspecified*/;
syntax_option_type является BitmaskType, который содержит опции, которые управляют тем, как ведут себя регулярные выражения.
Оригинал:
The syntax_option_type is a BitmaskType that contains options that govern how regular expressions behave.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Возможные значения для этого типа (icase, optimize и т.д.) дублируются в std::basic_regex.
Оригинал:
The possible values for this type (icase, optimize, etc.) are duplicated inside std::basic_regex.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

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

Значение Эффект(ы)
icase Сопоставление символов должно выполняться без учёта регистра.
nosubs При выполнении сопоставлений все отмеченные подвыражения (expr) обрабатываются как немаркирующие подвыражения (?:expr). В предоставленной структуре std::regex_match нет совпадений, а mark_count() равно нулю.
optimize Даёт указание обработчику регулярных выражений ускорить сопоставление с потенциальными затратами на замедление построения. Например, это может означать преобразование недетерминированного FSA в детерминированное FSA.
collate Диапазоны символов в форме "[a-b]" будут чувствительны к локали.
multiline(C++17) Указывает, что ^ должен соответствовать началу строки, а $ должен соответствовать концу строки, если выбран механизм ECMAScript.
ECMAScript Используется Модифицированная грамматика регулярных выражений ECMAScript
basic Используется базовая грамматика регулярных выражений POSIX (документация по грамматике).
extended Используется расширенная грамматика регулярных выражений POSIX (документация по грамматике).
awk Используется грамматика регулярных выражений, используемая утилитой awk в POSIX (документация по грамматике)
grep Используется грамматика регулярных выражений, используемая утилитой grep в POSIX. Фактически это то же самое, что и опция basic с добавлением новой строки '\n' в качестве разделителя чередования.
egrep Используется грамматика регулярных выражений, используемая утилитой grep в POSIX с параметром -E. Фактически это то же самое, что и опция extended с добавлением новой строки '\n' в качестве разделителя чередования в дополнение к '|'.

Необходимо выбрать не более одного варианта грамматики из ECMAScript, basic, extended, awk, grep, egrep. Если грамматика не выбрана, предполагается, что выбрана ECMAScript. Другие параметры служат модификаторами, например std::regex("meow", std::regex::icase) эквивалентно std::regex("meow", std::regex::ECMAScript|std::regex::icase)

[править]Заметки

Потому что POSIX использует "левые длинный" правило соответствия (самая длинная соответствие последовательность совпадает, и если есть несколько таких последовательностей, первый из которых соответствует), он не подходит, например, для разбора языков разметки: POSIX регулярных выражений, таких как "<tag[^>]*>.*</tag>" будет соответствовать всем с первого "<tag" до последнего "</tag>", в том числе каждый "</tag>" и "<tag>" между ними. С другой стороны, ECMAScript поддерживает не жадный матчей, и ECMAScript регулярных выражений "<tag[^>]*>.*?</tag>" будет соответствовать только до первого закрывающего тега.
Оригинал:
Because POSIX uses "leftmost longest" matching rule (the longest matching subsequence is matched, and if there are several such subsequences, the first one is matched), it is not suitable, for example, for parsing markup languages: a POSIX regex such as "<tag[^>]*>.*</tag>" would match everything from the first "<tag" to the last "</tag>", including every "</tag>" and "<tag>" inbetween. On the other hand, ECMAScript supports non-greedy matches, and the ECMAScript regex "<tag[^>]*>.*?</tag>" would match only until the first closing tag.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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

Иллюстрирует разницу в алгоритме сопоставления между ECMAScript и POSIX регулярных выражений
Оригинал:
Illustrates the difference in the matching algorithm between ECMAScript and POSIX regular expressions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

#include <iostream>#include <string>#include <regex>   int main(){std::string str ="zzxayyzz";std::regex re1(".*(a|xayy)");// ECMAstd::regex re2(".*(a|xayy)", std::regex::extended);// POSIX   std::cout<<"Searching for .*(a|xayy) in zzxayyzz:\n";std::smatch m;std::regex_search(str, m, re1);std::cout<<" ECMA (depth first search) match: "<< m[0]<<'\n';std::regex_search(str, m, re2);std::cout<<" POSIX (leftmost longest) match: "<< m[0]<<'\n';}

Вывод:

Searching for .*(a|xayy) in zzxayyzz: ECMA (depth first search) match: zzxa POSIX (leftmost longest) match: zzxayy

[править]См. также

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