Синтаксис регулярного выражения 2 (re2.h)
Регулярные выражения — это нотация для описания наборов строк символов. Если строка находится в наборе, описанном регулярным выражением, мы говорим, что регулярное выражение соответствует строке.
Самое простое регулярное выражение — это один буквенный символ. Кроме метасимволов, таких как *+?()|
, символы соответствуют самим себе. Чтобы сопоставить метачару, экранируйте ее с обратной косой чертой. Например, \+
соответствует литералу плюс символа.
Два регулярных выражения могут быть изменены или сцеплены для формирования нового регулярного выражения: если e1 соответствует s и e2 соответствует t, то e1 | e2 соответствует s или t и e1e2 соответствует st.
Метасимракторы *
, +
и ?
являются операторами повторения: e1*
соответствует последовательности из нуля или нескольких (возможно, разных) строк, каждая из которых соответствует e1; e1+
соответствует одному или нескольким; e1?
соответствует нулю или единице.
Приоритет операторов, от слабой до самой надежной привязки, выглядит следующим образом:
- чередование
- конкатенация
- Операторы повторения
Явные скобки можно использовать для принудительного применения различных значений, как в арифметических выражениях. Некоторые примеры: ab|cd
эквивалентно (ab)|(cd)
; ab\
эквивалентно a(b\)
.
Описанный выше синтаксис в основном является стандартным синтаксисом регулярного выражения egrep Unix. Этого подмножества достаточно, чтобы описать все обычные языки. Обычный язык — это набор строк, которые можно сопоставить за один проход через текст, используя только фиксированный объем памяти. Новые средства регулярных выражений (в частности, Perl и языки, которые его скопировали) добавили много новых операторов и escape-последовательностей. Эти изменения делают регулярные выражения более краткими, а иногда и более загадочными, но не более мощными.
На этой странице представлен синтаксис регулярных выражений, принятый в RE2.
В нем также перечислены некоторые синтаксисы, принятые PCRE, PERL и VIM.
Типы односимвольных выражений | Примеры |
---|---|
любой символ, возможно, включающий новую строку (s=true) | . |
класс символов | [xyz] |
класс отрицательных символов | [^xyz] |
класс символов Perl (ссылка) | \d |
класс отрицательных символов Perl | \D |
класс символов ASCII (ссылка) | [[:alpha:]] |
класс отрицательных символов ASCII | [[:^alpha:]] |
класс символов Юникода (однобуквенное имя) | \pN |
класс символов Юникода | \p{Greek} |
класс отрицательных символов Юникода (однобуквенное имя) | \PN |
класс отрицательных символов Юникода | \P{Greek} |
Составные части | |
---|---|
xy | x, за которым следует y |
x|y | x или y (предпочтительно x) |
Повторы | |
---|---|
x* | ноль или больше x; предпочтительно больше |
x+ | один или больше x; предпочтительно больше |
x? | ноль или один х, предпочтительно один |
x{n,m} | n или n+1, или ..., или m x, предпочтительно больше |
x{n,} | n или больше x; предпочтительно больше |
x{n} | точно n x |
x*? | ноль или больше x; предпочтительно меньше |
x+? | один или больше x; предпочтительно меньше |
x?? | ноль или один х, предпочтительно ноль |
x{n,m}? | n или n+1, или ..., или m x, предпочтительно меньше |
x{n,}? | n или больше x; предпочтительно меньше |
x{n}? | точно n x |
x{} | (≡ x*) (НЕ ПОДДЕРЖИВАЕТСЯ) ЭНЕРГИЯ |
x{-} | (≡ x*?) (НЕ ПОДДЕРЖИВАЕТСЯ) ЭНЕРГИЯ |
x{-n} | (≡ x{n}?) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
x= | (≡ x?) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
Ограничение реализации: формы подсчета x{n,m}
, x{n,}
и x{n}
отклоняющие формы, которые создают минимальное или максимальное число повторений свыше 1000. Это ограничение не распространяется на неограниченное количество повторений.
Жадные повторения | |
---|---|
x*+ | ноль или больше x, жадное (НЕ ПОДДЕРЖИВАЕТСЯ) |
x++ | один или больше x, жадное (НЕ ПОДДЕРЖИВАЕТСЯ) |
x?+ | ноль или один x, жадное (НЕ ПОДДЕРЖИВАЕТСЯ) |
x{n,m}+ | n или ..., или m x, жадное (НЕ ПОДДЕРЖИВАЕТСЯ) |
x{n,}+ | n или больше x, жадное (НЕ ПОДДЕРЖИВАЕТСЯ) |
x{n}+ | точно n x, жадное (НЕ ПОДДЕРЖИВАЕТСЯ) |
Группирование | |
---|---|
(re) | нумерованная группа захвата (частичное совпадение) |
(?P<name>re) | именованной & нумерованной группе записи (подсчет) |
(?<name>re) | с именем & нумерованной группой записи (подсочет) (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?' name're) | с именем & нумерованной группой записи (подсочет) (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?:re) | группа без захвата |
(?flags) | установка флагов в текущей группе; без захвата |
(?flags:re) | установка флагов при ответе; без захвата |
(?#text) | комментарий (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?|x|y|z) | сброс нумерации ветви (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?>re) | жадное сопоставление для re (НЕ ПОДДЕРЖИВАЕТСЯ) |
re@> | жадное сопоставление для re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
%(re) | группа без захвата (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
Флажки | |
---|---|
i | без учета регистра (значение по умолчанию: false) |
m | многострочный режим: ^ и $ соответствуют началу и концу строки в дополнение к тексту начала и конца (значение по умолчанию: false) |
s | разрешение . соответствовать \n (значение по умолчанию: false) |
U | ungreedy: значение переключения x* и x*?, x+ и x+?, и т. д. (по умолчанию false) |
Синтаксис флага: xyz
(set) или -xyz
(clear) или xy-z
(set xy
, clear z
).
Пустые строки | |
---|---|
^ | в начале текста или строки (m=true) |
$ | в конце текста (например, \z, а не \Z) или строки (m=true) |
\A | в начале текста |
\b | на границе слова ASCII (\w с одной стороны и \W, \A или \z — с другой) |
\B | не на границе слова ASCII |
\g | в начале искомого подчиненного текста (НЕ ПОДДЕРЖИВАЕТСЯ) PCRE |
\G | в конце последнего соответствия (НЕ ПОДДЕРЖИВАЕТСЯ) PERL |
\Z | в конце текста или перед новой строкой в конце текста (НЕ ПОДДЕРЖИВАЕТСЯ) |
\z | в конце текста |
(?=re) | перед текстом, соответствующим re (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?!re) | перед текстом, не соответствующим re (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?<=re) | после текста, соответствующего re (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?<!re) | после текста, не соответствующего re (НЕ ПОДДЕРЖИВАЕТСЯ) |
re& | перед текстом, соответствующим re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
re@= | перед текстом, соответствующим re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
re@! | перед текстом, не соответствующим re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
<re@= | после текста, соответствующего re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
re@<! | после текста, не соответствующего re (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\zs | задает начало соответствия (= \K) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\ze | задает конец соответствия (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%^ | начало файла (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%$ | конец файла (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%V | на экране (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%# | положение курсора (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%'m | положение метки m (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%23l | в строке 23 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%23c | в столбце 23 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\%23v | в виртуальном столбце 23 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
Последовательности экранирования | |
---|---|
\a | колокольчик (≡ \007) |
\f | веб-канал формы (≡ \014) |
\t | горизонтальная табуляция (≡ \011) |
\n | новая строка (≡ \012) |
\r | возврат каретки (≡ \015) |
\v | символ вертикальной табуляции (≡ \013) |
* | литерал *, для любого знака препинания * |
\123 | восьмеричный код символа (до трех цифр) |
\x7F | шестнадцатеричный код символа (точно две цифры) |
\x{10FFFF} | шестнадцатеричный код символа |
\C | соответствие одного байта даже в режиме UTF-8 |
\Q...\E | обычный текст ..., даже если ... содержит знаки препинания |
\1 | обратная ссылка (НЕ ПОДДЕРЖИВАЕТСЯ) |
\b | возврат на символ (НЕ ПОДДЕРЖИВАЕТСЯ) (используйте \010) |
\cK | управляющий символ ^K (НЕ ПОДДЕРЖИВАЕТСЯ) (используйте \001 и т. д.) |
\e | экранирование (НЕ ПОДДЕРЖИВАЕТСЯ) (используйте \033) |
\g1 | обратная ссылка (НЕ ПОДДЕРЖИВАЕТСЯ) |
\g{1} | обратная ссылка (НЕ ПОДДЕРЖИВАЕТСЯ) |
\g{+1} | обратная ссылка (НЕ ПОДДЕРЖИВАЕТСЯ) |
\g{-1} | обратная ссылка (НЕ ПОДДЕРЖИВАЕТСЯ) |
\g{name} | именованная обратная ссылка (НЕ ПОДДЕРЖИВАЕТСЯ) |
\g<name> | вызов подпрограммы (НЕ ПОДДЕРЖИВАЕТСЯ) |
\g'name' | вызов подпрограммы (НЕ ПОДДЕРЖИВАЕТСЯ) |
\k<name> | именованная обратная ссылка (НЕ ПОДДЕРЖИВАЕТСЯ) |
\k'name' | именованная обратная ссылка (НЕ ПОДДЕРЖИВАЕТСЯ) |
\lX | X в нижнем регистре (НЕ ПОДДЕРЖИВАЕТСЯ) |
\ux | x в верхнем регистре (НЕ ПОДДЕРЖИВАЕТСЯ) |
\L...\E | текст ... в нижнем регистре (НЕ ПОДДЕРЖИВАЕТСЯ) |
\K | сброс начала $0 (НЕ ПОДДЕРЖИВАЕТСЯ) |
\N{name} | именованный символ Юникода (НЕ ПОДДЕРЖИВАЕТСЯ) |
\R | разрыв строки (НЕ ПОДДЕРЖИВАЕТСЯ) |
\U...\E | текст ... в верхнем регистре (НЕ ПОДДЕРЖИВАЕТСЯ) |
\X | расширенная последовательность Юникода (НЕ ПОДДЕРЖИВАЕТСЯ) |
%d123 | десятичный символ 123 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
%xFF | шестнадцатеричный символ FF (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
%o123 | восьмеричный символ 123 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
%u1234 | символ Юникода 0x1234 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
%U12345678 | символ Юникода 0x12345678 (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
Элементы класса символов | |
---|---|
x | одиночный символ |
A–Z | диапазон символов (включительно) |
\d | класс символов Perl |
[:foo:] | класс foo символов ASCII |
\p{Foo} | класс Foo символов Юникода |
\pF | класс F символов Юникода (однобуквенное имя) |
Классы именованных символов как элементы класса символов | |
---|---|
[\d] | цифры (≡ \d) |
[^\d] | не цифры (≡ \D) |
[\D] | не цифры (≡ \D) |
[^\D] | не "не цифры" (≡ \d) |
[[:name:]] | именованный класс ASCII внутри класса символов (≡ [:name:]) |
[^[:name:]] | именованный класс ASCII внутри класса отрицательных символов (≡ [:^name:]) |
[\p{Name}] | именованное свойство Юникода внутри класса символов (≡ \p{Name}) |
[^\p{Name}] | именованное свойство Юникода внутри класса отрицательных символов (≡ \P{Name}) |
Имена классов символов Юникода — общая категория | |
---|---|
C | др. |
Копия | control |
Cf | format |
CN | неназначенные кодовые точки (НЕ ПОДДЕРЖИВАЕТСЯ) |
Co | закрытое использование |
Cs | суррогат |
L | буква |
LC | буквы в регистре (НЕ ПОДДЕРЖИВАЕТСЯ) |
L& | буквы в регистре (НЕ ПОДДЕРЖИВАЕТСЯ) |
Ll | строчные буквы |
Lm | буква модификатора |
Lo | другая буква |
Lt | заглавная буква |
Lu | прописная буква |
M | знак |
Mc | знак пробела |
Me | знак завершения |
Mn | непробельный знак |
N | number |
Nd | десятичное число |
Nl | буквенное число |
Нет | другое число |
P | знаки препинания |
Pc | знаки препинания соединителя |
Pd | знак тире |
Pe | закрывающий знак препинания |
Pf | последний знак препинания |
Pi | исходный знак препинания |
Po | другой знак препинания |
Ps | открывающий знак препинания |
S | symbol, |
Sc | символ денежной единицы |
Sk | символ модификатора |
Sm | математический символ |
So | другой символ |
Z | разделитель |
Zl | разделитель строки |
Zp | разделитель абзаца |
Zs | разделитель в виде пробела |
Имена классов символов Юникода — письменность |
---|
Адлам |
Ахом |
Anatolian_Hieroglyphs |
Арабский |
Армянский |
Авестийская |
Балийская письменность |
Бамум |
Bassa_Vah |
Батакское письмо |
Бенгальский |
Бхайксуки |
Бопомофо |
Брахми |
Шрифт Брайля |
Бугийское письмо |
Бухид |
Canadian_Aboriginal |
Карийское письмо |
Caucasian_Albanian |
Чакма |
Чамская письменность |
Чероки |
Хорезмская письменность |
Общие |
Коптское письмо |
Клинопись |
Кипрское письмо |
Кириллица |
Дезерет |
Деванагарская письменность |
Dives_Akuru |
Догра |
Дуплоянская скоропись |
Egyptian_Hieroglyphs |
Эльбасанское письмо |
Элимаик |
Эфиопское письмо |
Грузинский |
Глаголица |
Готское письмо |
Грантха |
Греческий |
Письменность гуджарати |
Gunjala_Gondi |
Письменность гурмукхи |
Китайские иероглифы |
Хангыль |
Hanifi_Rohingya |
Хануноо |
Хатран |
Иврит |
Хирагана |
Imperial_Aramaic |
Наследование |
Inscriptional_Pahlavi |
Inscriptional_Parthian |
Яванская письменность |
Кайтхи |
Письменность каннада |
Катакана |
Kayah_Li |
Кхароштхи |
Khitan_Small_Script |
Кхмерский |
Ходжки |
Кхудавади |
Лаосский |
Цифры, используемые с латинским алфавитом |
Письменность лепча |
Письменность лимбу |
Linear_A |
Linear_B |
Лису |
Ликийская письменность |
Лидийская письменность |
Махаджани |
Письменность макасар |
Письменность малаялам |
Мандейская письменность |
Манихейская письменность |
Марчен |
Masaram_Gondi |
Медефаидрин |
Meetei_Mayek |
Mende_Kikakui |
Meroitic_Cursive |
Meroitic_Hieroglyphs |
Мяо |
Моди |
Монгольский |
Мро |
Мултани |
Мьянма |
Набатейское письмо |
Нандинагари |
New_Tai_Lue |
Ранджана |
Письменность нко |
Нюй-шу |
Nyiakeng_Puachue_Hmong |
Огамическое письмо |
Ol_Chiki |
Old_Hungarian |
Old_Italic |
Old_North_Arabian |
Old_Permic |
Old_Persian |
Old_Sogdian |
Old_South_Arabian |
Old_Turkic |
Ория |
Оседжи |
Сомалийское письмо |
Pahawh_Hmong |
Пальмирское письмо |
Pau_Cin_Hau |
Phags_Pa |
Финикийское письмо |
Psalter_Pahlavi |
Реджангская письменность |
Руническое письмо |
Самаритянское письмо |
Письменность саураштра |
Сарати |
Алфавит Шоу |
Сиддхаматрика |
SignWriting |
Сингальский |
Согдийское письмо |
Sora_Sompeng |
Соёмбо |
Сунданская письменность |
Syloti_Nagri |
Сирийский |
Тагалог |
Тагбанва |
Tai_Le |
Tai_Tham |
Tai_Viet |
Такри |
Тамильский |
Тангутское письмо |
Письменность телугу |
Тана |
Тайский |
Тибетская письменность |
Тифинаг |
Тирхута |
Угаритское письмо |
Письменность ваи |
Ванчо |
Warang_Citi |
Езидский алфавит |
Носу |
Zanabazar_Square |
Классы символов Vim | |
---|---|
\i | символ идентификатора (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\I | \i кроме цифр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\k | символ ключевого слова (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\K | \k кроме цифр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\f | символ имени файла (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\F | \f кроме цифр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\p | печатный символ (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\P | \p кроме цифр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\s | символ пробела (≡ [\t]) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\S | непробельный символ (≡ [^ \t]) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\d | цифры (≡ [0-9]) VIM |
\D | не \d VIM |
\x | шестнадцатеричные цифры (≡ [0-9A-Fa-f]) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\X | не \x (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\o | восьмеричные цифры (≡ [0-7]) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\O | не \o (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\w | символ слова VIM |
\W | не \w VIM |
\h | символ основы слова (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\H | не \h (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\a | буквенный (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\A | не \a (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\l | нижний регистр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\L | не нижний регистр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\u | верхний регистр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\U | не верхний регистр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
_x | \x плюс новая строка, для любого x (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\c | игнорирование регистра (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\C | соответствие регистру (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\m | магический (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\M | немагический (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\v | очень магический (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\V | очень немагический (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
\Z | игнорирование различий в символах объединения Юникода (НЕ ПОДДЕРЖИВАЕТСЯ) VIM |
Магический | |
---|---|
(?{code}) | произвольный код Perl (НЕ ПОДДЕРЖИВАЕТСЯ) PERL |
(??{code}) | отложенный произвольный код Perl (НЕ ПОДДЕРЖИВАЕТСЯ) PERL |
(?n) | рекурсивный вызов группы захвата regexp n (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?+n) | рекурсивный вызов относительной группы +n (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?-n) | рекурсивный вызов относительной группы -n (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?C) | вызов PCRE (НЕ ПОДДЕРЖИВАЕТСЯ) PCRE |
(?R) | рекурсивный вызов всего выражения regexp (≡ (?0)) (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?&имя) | рекурсивный вызов именованной группы (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?P=name) | именованная обратная ссылка (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?P>name) | рекурсивный вызов именованной группы (НЕ ПОДДЕРЖИВАЕТСЯ) |
(? (cond)true|false) | условная ветвь (НЕ ПОДДЕРЖИВАЕТСЯ) |
(?(cond)true) | условная ветвь (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*ACCEPT) | преобразование выражений regexp по аналогии с Prolog (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*COMMIT) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*F) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*FAIL) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*MARK) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*PRUNE) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*SKIP) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*THEN) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*ANY) | настройка соглашения для новой строки (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*ANYCRLF) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*CR) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*CRLF) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*LF) | (НЕ ПОДДЕРЖИВАЕТСЯ) |
(*BSR_ANYCRLF) | настройка соглашения \R (НЕ ПОДДЕРЖИВАЕТСЯ) PCRE |
(*BSR_UNICODE) | (НЕ ПОДДЕРЖИВАЕТСЯ) PCRE |
Примечание
Некоторые части этой страницы представляют собой измененные материалы, созданные и предоставленные на сайте Chromium.org. Их использование регулируется условиями, описанными в лицензии Creative Commons Attribution 4.0 International License. Исходная страница Chromium находится здесь.
Эта работа предоставляется в рамках международной лицензии Creative Commons Attribution 4.0 International License.