Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

POSIX Basic Regular Expression Syntax

Boost , Boost.Regex 5.1.2 , Regular Expression Syntax

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Synopsis

Синтаксис регулярных выражений POSIX-Basic используется утилитой Unix<sed>, а вариации используются<grep>и<emacs>. В Boost можно создавать базовые регулярные выражения POSIX. Регекс посредством передачи флага<basic>конструктору регекса (см.<syntax_option_type>), например:

// e1 is a case sensitive POSIX-Basic expression:
boost::regex e1(my_expression, boost::regex::basic);
// e2 a case insensitive POSIX-Basic expression:
boost::regex e2(my_expression, boost::regex::basic|boost::regex::icase);

POSIX Basic Syntax

В регулярных выражениях POSIX-Basic все символы совпадают друг с другом, за исключением следующих специальных символов:

.[\*^$
Wildcard:

При использовании вне набора символов одиночный символ будет соответствовать любому отдельному символу, за исключением:

  • Символ NULL, когда флаг<match_no_dot_null>передается алгоритмам соответствия.
  • Новый символ линии, когда флаг<match_not_dot_newline>передается алгоритмам соответствия.
Anchors:

Персонаж «^» должен соответствовать началу строки при использовании в качестве первого символа выражения или первого символа подвыражения.

Символ «$» должен соответствовать концу строки при использовании в качестве последнего символа выражения или последнего символа подвыражения.

Marked sub-expressions:

Раздел, начинающийся<\(>и заканчивающийся<\)>, действует как обозначенное подвыражение. Все, что соответствует подвыражению, разделено в отдельном поле алгоритмами сопоставления. Помеченные суб-выражения также могут повторяться или ссылаться на обратную ссылку.

Repeats:

Любой атом (единый символ, обозначенное подвыражение или класс символов) может быть повторен с оператором *.

Например,<a*>будет совпадать с любым числом букв повторного нуля а или более раз (атом повторяется нулевое время совпадает с пустой строкой), поэтому выражение<a*b>будет соответствовать любому из следующего:

b
ab
aaaaaaaab

Атом также может быть повторен с ограниченным повторением:

<a\{n\}>Матчи «а» повторяются ровно n раз.

<a\{n,\}>Матчи «а» повторяются n или более раз.

<a\{n,m\}>Матчи 'a' повторяются между n и m раз включительно.

Например:

^a{2,3}$

Будет соответствовать любому из:

aa
aaa

Но ни один из них:

a
aaaa

Ошибкой является использование оператора повтора, если предыдущая конструкция не может быть повторена, например:

a(*)

Приведет к ошибке, так как оператору * нечего применять.

Back references:

Характер побега, за которым следует цифраn, гдеnнаходится в диапазоне 1-9, соответствует той же строке, которая была сопоставлена субэкспрессиейn. Например, выражение:

^\(a*\).*\1$

Будет соответствовать струне:

aaabbaaa

Но только не струна:

aaabba
Character sets:

Набор символов - это выражение скобки, начиная с [и заканчивая ], оно определяет набор символов и соответствует любому отдельному персонажу, который является членом этого набора.

Выражение скобки может содержать любую комбинацию из следующего:

Single characters:

Например,<[abc]>, будет соответствовать любому из символов 'a', 'b' или 'c'.

Character ranges:

Например,<[a-c]>будет соответствовать любому одному персонажу в диапазоне от «a» до «c». По умолчанию для POSIX-базовых регулярных выражений символxнаходится в диапазонеудоz, если он коллатирует в этом диапазоне; это приводит к специфическому поведению локализации. Это поведение можно отключить, отключив флаг опции<collate>при построении регулярного выражения — в этом случае, появляется ли персонаж в диапазоне, определяется путем сравнения только кодовых точек символов.

Negation:

Если выражение скобки начинается с символа ^, то оно совпадает с дополнением символов, которые оно содержит, например<[^a-c]>соответствует любому символу, который не находится в диапазоне a-c.

Character classes:

Выражение формы<[[:name:]]>соответствует названному классу символов «имя», например<[[:lower:]]>соответствует любому персонажу нижнего регистра. См.названия классов.

Collating Elements:

Выражение формы<[[.col.]>соответствует коллатеральному элементуcol. Коллатинговый элемент — это любой одиночный символ или любая последовательность символов, которые коллатируются как единое целое. В качестве конечной точки диапазона могут также использоваться элементы коллатинга, например:<[[.ae.]-c]>соответствует последовательности символов «ae», плюс любой одиночный символ в диапазоне «ae»-c, предполагая, что «ae» рассматривается как один элемент коллатинга в текущей локализации.

Элементы коллайтинга могут использоваться вместо побегов (которые обычно не допускаются внутри наборов символов), например<[[.^.]abc]>будет соответствовать любому из символов 'abc^'.

В качестве расширения коллатинговый элемент может быть также указан через его символическое название, например:

[[.NUL.]]

Совпадает с персонажем «NUL». См.названия элементов.

Equivalence classes:

Выражение формы<[[=col=]]>соответствует любому символу или коллатеральному элементу, основной сорт-ключ которого такой же, как и для коллатерального элемента, так как при коллатеральном элементе имяможет бытьколлатеральным символическим именем. Основной сорт-ключ - это тот, который игнорирует случай, акцентацию или локальные пошивы; так, например<[[=a=]]>соответствует любому из персонажей: a, & #192;, & #193;, & #194;, & #195;, & #196;, & #197;, A, & #224;, & #225;, & #226;, & #227;, & #228; и & #229;. К сожалению, реализация этого зависит от поддержки коллаборации и локализации платформы; на эту функцию нельзя полагаться для переносимости на всех платформах или даже во всех местах на одной платформе.

Combinations:

Все вышеперечисленное можно объединить в одну декларацию набора символов, например:<[[:digit:]a-c[.NUL.]].>

Escapes

За исключением последовательностей побега \{, \}, \( и \), которые описаны выше, побег, за которым следует любой персонаж, соответствует этому персонажу. Это можно использовать для создания специальных символов.

.[\*^$

"обычный". Обратите внимание, что персонаж побега теряет свой особый смысл внутри набора персонажей, поэтому<[\^]>будет соответствовать либо буквальному '', либо '''.

What Gets Matched

Когда есть более чем один способ соответствовать обычному выражению, «наилучший» возможный матч получается с использованиемлевое самое длинное правило.

Variations

Grep

Когда выражение скомпилировано с набором флага<grep>, то выражение рассматривается как новый выделенный списокPOSIX-основных выражений, совпадение обнаруживается, если какое-либо из выражений в совпадении списка, например:

boost::regex e("abc\ndef", boost::regex::grep);

Он будет соответствовать любому изосновных выражений POSIX«abc» или «def».

Как следует из названия, такое поведение согласуется с утилитой Unix grep.

emacs

В дополнение кфункциям POSIX-Basicследующие символы также являются специальными:

характер

Описание

+

повторяет предыдущий атом один или несколько раз.

?

повторяет предыдущий атом ноль или один раз.

  • ?
? [ORIG_END] -->

Нежадная версия *.

+?

Нежадная версия +.

?

Нежадная версия?

Также распознаются следующие последовательности побегов:

Побег

Описание

\ |

указывает альтернативу.

\(?: ...)

представляет собой немаркирующую группировку конструкцию — позволяет лексически группировать что-либо, не выплевывая дополнительного подвыражения.

\w

соответствует любому слову.

\W

Соответствует любому неслову.

\sx

соответствует любому персонажу в синтаксической группе x, поддерживаются следующие группировки emacs: 's', '', '_', ''w', '', ''', ''', ''', '''', '''', '''', '''', '>'' и '<''. См. документы Emacs для деталей.

\Sx

соответствует любому символу, не находящемуся в синтаксической группе x.

\c и \C

Они не поддерживаются.

соответствует нулю символов только в начале буфера (или строки, совпадающие).

соответствует нулю символов только в конце буфера (или строки, совпадающие).

\b

соответствует нулю символов на границе слов.

\B

соответствует нулю символов, а не границе слов.

\<

соответствует нулю символов только в начале слова.

\>

соответствует нулю символов только в конце слова.

Наконец, вы должны отметить, что регулярные выражения в стиле emacs соответствуют. Правила «глубинного первого поиска». Выражения Emacs совпадают таким образом, потому что они содержат Perl-подобные расширения, которые плохо взаимодействуют справилом в стиле POSIX.

Options

Существуетмножество флагов, которые могут быть объединены с<basic>и<grep>опциями при построении регулярного выражения, в частности, обратите внимание, что<newline_alt>,<no_char_classes>,<no-intervals>,<bk_plus_qm>и<bk_plus_vbar>опции изменяют синтаксис, в то время как<collate>и<icase>опцииизменяют способ применения чувствительности к случаю и локализации.

References

IEEE Std 1003.1-2001, Portable Operating System Interface (POSIX), Base Definitions and Headers, Section 9, Regular Expressions (FWD.1).

IEEE Std 1003.1-2001, Portable Operating System Interface (POSIX), Shells and Utilities, Section 4, Utilities, grep (FWD.1).

Emacs Версия 21.3.


PrevUpHomeNext

Статья POSIX Basic Regular Expression Syntax раздела Boost.Regex 5.1.2 Regular Expression Syntax может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Regular Expression Syntax ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 20:53:20/0.011507034301758/1