![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
POSIX Extended Regular Expression SyntaxBoost , Boost.Regex 5.1.2 , Regular Expression Syntax
|
![]() |
Caution |
---|---|
Стандарт POSIX не поддерживает обратные ссылки для «расширенных» регулярных выражений. |
Оператор<|
>будет соответствовать любому из своих аргументов, поэтому, например:<abc|def
>будет соответствовать либо «abc», либо «def».
Парентезис можно использовать для групповых чередований, например:<ab(d|ef)
>будет соответствовать либо «abd», либо «abef».
Набор символов - это выражение скобки, начиная с [и заканчивая ], оно определяет набор символов и соответствует любому отдельному персонажу, который является членом этого набора.
Выражение скобки может содержать любую комбинацию из следующего:
Например,<[abc]
>, будет соответствовать любому из символов 'a', 'b' или 'c'.
Например,<[a-c]
>будет соответствовать любому одному персонажу в диапазоне от «a» до «c». По умолчанию для POSIX-расширенных регулярных выражений символxнаходится в диапазонеудоz, если он коллатирует в этом диапазоне; это приводит к специфическому поведению локализации. Это поведение можно отключить, отключив флаг опции<collate
>— в этом случае, появляется ли персонаж в диапазоне, определяется путем сравнения только кодовых точек символов.
Если выражение скобки начинается с символа ^, то оно совпадает с дополнением символов, которые оно содержит, например<[^a-c]
>соответствует любому персонажу, который не находится в диапазоне<a-c
>.
Выражение формы<[[:name:]]
>соответствует названному классу символов «имя», например<[[:lower:]]
>соответствует любому персонажу нижнего регистра. См.названия классов.
Выражение формы<[[.col.]
>соответствует коллационному элементуcol. Коллатеральный элемент - это любой один символ или любая последовательность символов, которые коллатируются как единое целое. В качестве конечной точки диапазона могут также использоваться коллационные элементы, например:<[[.ae.]-c]
>соответствует последовательности символов «ae», плюс любой одиночный символ в диапазоне «ae»-c, предполагая, что «ae» рассматривается как один коллатинговый элемент в текущей локализации.
Элементы коллайтинга могут использоваться вместо побегов (которые обычно не допускаются внутри наборов символов), например<[[.^.]abc]
>будет соответствовать любому из символов 'abc^'.
В качестве расширения коллатинговый элемент может быть также указан через егосимволическое имя, например:
[[.NUL.]]
Соответствует NUL-персонажу.
Выражение формы<[[=col=]]
>соответствует любому символу или коллатеральному элементу, основной сорт-ключ которого такой же, как и для коллатерального элемента, так как при коллатеральных элементах имяможет бытьсимволическим именем. Основной сорт-ключ - это тот, который игнорирует случай, акцентацию или локальные пошивы; так, например,<[[=a=]]
>соответствует любому из персонажей: a, & #192;, & #193;, & #194;, & #195;, & #196;, & #197;, A, & #224;, & #225;, & #226;, & #227;, & #228; и & #229;. К сожалению, реализация этого зависит от поддержки коллаборации и локализации платформы; на эту функцию нельзя полагаться, чтобы она работала переносимо на всех платформах или даже во всех местах на одной платформе.
Все вышеперечисленное можно объединить в одну декларацию набора символов, например:<[[:digit:]a-c[.NUL.]]
>.
Стандарт POSIX не определяет последовательности выхода для регулярных выражений POSIX-Extended, за исключением того, что:
[\^]
>будет соответствовать либо буквальному '', либо '''.Однако это довольно ограничительно, поэтому следующие стандартно совместимые расширения также поддерживаются Boost. Регекс:
Следующие последовательности бегства являются синонимами для отдельных символов:
Побег |
характер |
---|---|
\a |
'а' |
\e |
0x1B |
\f |
\f |
\n |
\n |
\r |
\r |
\t |
\t |
\v |
\v |
\b |
\b (но только внутри объявления класса символов). |
\cX |
Последовательность побега ASCII — символ, кодовая точка которого составляет X % 32 |
\xdd |
Шестидесятичная последовательность побега — соответствует единственному персонажу, кодовая точка которого 0xdd. |
\x{dddd} |
Шестидесятичная последовательность побега — соответствует единственному персонажу, кодовая точка которого 0xdddd. |
0ddd |
Октальная последовательность побега — соответствует единственному персонажу, кодовая точка которого 0ddd. |
\N{Имя} |
Соответствует единственному символу, который имеет символическое имяИмя. Например,< |
Любой сбежавший персонажx, еслиxявляется именем класса персонажей, должен соответствовать любому персонажу, который является членом этого класса, и любой сбежавший персонажX, еслиxявляется именем класса персонажей, должен соответствовать любому персонажу, не относящемуся к этому классу.
По умолчанию поддерживаются следующие:
Последовательность побега |
эквивалентный |
---|---|
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
Имена свойств символов в следующей таблице эквивалентны именам, используемым в классах символов.
форма |
Описание |
эквивалентная форма набора символов |
---|---|---|
< |
Соответствует любому символу, который имеет свойство X. |
< |
< |
Соответствует любому символу, имеющему имя свойства. |
< |
< |
Соответствует любому символу, который не обладает свойством X. |
< |
< |
Соответствует любому персонажу, у которого нет имени собственности. |
< |
Например,<\pd
>соответствует любому «цифровому» персонажу, как и<\p{digit}
>.
Следующие последовательности побега соответствуют границам слов:
Побег |
значение |
---|---|
< |
Соответствует началу слова. |
< |
Соответствует концу слова. |
< |
Соответствует границе слова (начало или конец слова). |
< |
Соответствует только тогда, когда не на границе слова. |
Следующее совпадение только на границах буфера: «буфер» в этом контексте - это весь входной текст, который сопоставляется с (обратите внимание, что ^ и $ могут соответствовать встроенным новым линиям в тексте).
Побег |
значение |
---|---|
Матчи только в начале буфера. |
|
Матчи только в конце буфера. |
|
< |
Матчи только в начале буфера (то же самое, что и \'). |
< |
Матчи только в конце буфера (то же, что и \'). |
< |
Сопоставляет необязательную последовательность новых линий в конце буфера: эквивалентно обычному выражению< |
Последовательность<\G
>совпадает только в конце последнего найденного матча или в начале текста, если предыдущий матч не был найден. Этот выход полезен, если вы повторяете матчи, содержащиеся в тексте, и хотите, чтобы каждый последующий матч начинался там, где закончился последний.
Последовательность выхода<\Q
>начинает «цитируемую последовательность»: все последующие символы трактуются как буквальные, пока не будет найден либо конец регулярного выражения, либо<\E
>. Например, выражение:<\Q\*+\Ea+
>соответствует любому из:
\*+a \*+aaa
Побег |
значение |
---|---|
< |
Соответствует одной точке кода: в Boost regex это имеет точно такой же эффект, как и оператор. |
< |
Сопоставляет комбинирующую последовательность символов: то есть любой некомбинирующий символ, за которым следует последовательность нулевых или более комбинирующих символов. |
Любая другая последовательность побега соответствует персонажу, который ускользнул, например, @ соответствует буквальному @.
Порядок приоритета операторов выглядит следующим образом:
[==]
[::][..]
>\
>[]
>()
>*
+?
{m,n}
>|
>Когда существует более чем один способ соответствия обычному выражению, «наилучшее» возможное соответствие получается с использованиемлевое самое длинное правило.
Когда выражение скомпилировано с наборомфлага<egrep
>, то выражение рассматривается как новый выделенный списоквыражений POSIX-Extended, совпадение обнаруживается, если любое из выражений в совпадении списка, например:
boost::regex e("abc\ndef", boost::regex::egrep);
Соответствует любому из основных выражений POSIX «abc» или «def».
Как следует из названия, такое поведение согласуется с утилитой Unix<egrep
>и с грэпом при использовании с опцией -E.
В дополнение кфункциям POSIX-Extendedубегающий символ является специальным внутри объявления класса символов.
Кроме того, необходимо поддерживать некоторые последовательности выхода, которые не определены как часть спецификации POSIX-Extended, однако Boost. Regex поддерживает их по умолчанию.
Существуетразнообразие флагов, которые могут быть объединены с<extended
>и<egrep
>вариантами при построении регулярного выражения, в частности, обратите внимание, что<newline_alt
>опция изменяет синтаксис, в то время как<collate
>,<nosubs
>и<icase
>опцииизменяют способ применения чувствительности к регистру и локализации.
Статья POSIX Extended Regular Expression Syntax раздела Boost.Regex 5.1.2 Regular Expression Syntax может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Regular Expression Syntax ::
реклама |