std::regex_constants::syntax_option_type
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody>| Определено в заголовочном файле <regex>
|
||
typedef /*unspecified*/ syntax_option_type; static constexpr syntax_option_type icase = /*unspecified*/; static constexpr syntax_option_type nosubs = /*unspecified*/; static constexpr syntax_option_type optimize = /*unspecified*/; static constexpr syntax_option_type collate = /*unspecified*/; static constexpr syntax_option_type ECMAScript = /*unspecified*/; static constexpr syntax_option_type basic = /*unspecified*/; static constexpr syntax_option_type extended = /*unspecified*/; static constexpr syntax_option_type awk = /*unspecified*/; static constexpr syntax_option_type grep = /*unspecified*/; static constexpr 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.Оригинал:
Текст был переведён автоматически используя Переводчик 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)"); // ECMA
std::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
См. также
(C++11) |
объект регулярного выражения (шаблон класса) |