Синтаксис RE2

В этой статье представлен обзор синтаксиса регулярных выражений, поддерживаемых язык запросов Kusto (KQL), который является синтаксисом библиотеки RE2.

Существует ряд операторов и функций KQL, которые выполняют сопоставление, выделение и извлечение строк с помощью регулярных выражений, например matches regex, parseи replace_regex().

В KQL регулярные выражения должны быть закодированы как строковые литералы и соответствовать правилам цитирования строк. Например, регулярное выражение \A RE2 представлено в KQL как "\\A". Дополнительная обратная косая черта указывает, что другая обратная косая черта является частью регулярного выражения \A.

Общие сведения о синтаксисе

В следующей таблице представлен синтаксис регулярных выражений RE2, который используется для записи регулярных выражений в Kusto.

Элемент Syntax Описание
Одинарные литералы Отдельные символы соответствуют себе, за исключением метасимваторов (* + ? ( ) |), которые имеют уникальные значения, как описано в следующих строках.
Метасимволы Чтобы сопоставить метасимвол буквально, экранируйте его с помощью обратных косых черт. Например, регулярное выражение \+ соответствует литералу плюс (+).
Чередование Чередуйте два выражения с | , чтобы создать новое выражение, соответствующее обоим из выражений. Например, e1 | e2 соответствует или e1e2.
Объединение Сцепить два выражения, чтобы создать новое выражение, соответствующее первому выражению, за которым следует второе. Например, совпаденияe1, e1e2 за которым следует e2.
Повторение Метасимвы ?, , +и * являются операторами повторения. Например, e1? соответствует нулю или одному вхождениям e1, e1+ соответствует одному или нескольким вхождениям e1и e1* соответствует последовательности из нуля или нескольких строк, которые могут отличаться e1от .

Примечание

Операторы регулярных выражений вычисляют в следующем порядке: чередование (|), объединение (параллельные выражения) и повторение (?, +, *). Используйте круглые скобки для управления порядком вычисления.

Односимвовые выражения

Пример Описание
. любой символ, возможно, включающий символ перехода на новую строку (s = true)
[xyz] класс символов
[^xyz] отрицание от класса символов
\d класс символов Perl
\D отрицание от класса символов Perl
[[:alpha:]] класс символов ASCII
[[:^alpha:]] отрицание от класса символов ASCII
\pN класс символов Unicode (однобуквенное имя)
\p{Greek} класс символов Unicode
\PN отрицание от класса символов Unicode (однобуквенное имя)
\P{Greek} отрицание от класса символов Unicode

Комбинация

Пример Описание
xy x, затем y
x\|y x или y (предпочитать x)

Повторений

Пример Описание
x* ноль или больше x, предпочитать больше
x+ один или несколько x, предпочитать больше
x? ноль или один x, предпочитать один
x{n,m} n или n+1 или ... или mx, предпочитать больше
x{n,} n или более x, предпочитать больше
x{n} Совершенно верно nx
x*? ноль или больше x, предпочитать меньше
x+? один или несколько x, предпочитать меньше
x?? ноль или один x, предпочитать ноль
x{n,m}? n или n+1 или ... или mx, предпочитать меньше
x{n,}? n или больше x, предпочитать меньше
x{n}? Совершенно верно nx
x{} (≡ x*) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
x{-} (≡ x*?) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
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 Или... или mx, притяжательный (НЕ ПОДДЕРЖИВАЕТСЯ)
x{n,}+ n или более x, притяжательный (НЕ ПОДДЕРЖИВАЕТСЯ)
x{n}+ exactly nx, притяжательный (НЕ ПОДДЕРЖИВАЕТСЯ)

Группирование

Пример Описание
(re) нумерообразуемая захватываемая группа (подсочина)
(?P<name>re) именованной & нумерованной захватываемой группе (подсочинение)
(?<name>re) именованной & нумерованной захватываемой группе (подсочет) (НЕ ПОДДЕРЖИВАЕТСЯ)
(?'name're) именованной & нумерованной захватываемой группе (подсочет) (НЕ ПОДДЕРЖИВАЕТСЯ)
(?:re) невзахватываемая группа
(?flags) установка флагов в текущей группе; невзахватывание
(?flags:re) установка флагов во время повторного выполнения; невзахватывание
(?#text) comment (НЕ ПОДДЕРЖИВАЕТСЯ)
(?\|x\|y\|z) Сброс нумеровки ветвей (НЕ ПОДДЕРЖИВАЕТСЯ)
(?>re) притяжательное соответствие re (НЕ ПОДДЕРЖИВАЕТСЯ)
re@> притяжательное соответствие re VIM (НЕ ПОДДЕРЖИВАЕТСЯ)
%(re) группа без захвата (НЕ ПОДДЕРЖИВАЕТСЯ) VIM

Флаги

Пример Описание
i без учета регистра (по умолчанию false)
m многострочный режим: ^ и $ соответствуют начальной и конечной строке в дополнение к начальной и конечной строке (по умолчанию false)
s let . match \n (по умолчанию false)
U ungreedy: переключение значений x* и x*?, x+ и x+?и т. д. (по умолчанию false)

Синтаксис флага: xyz (set) или -xyz (clear) или xy-z (set xy, clear z).

Чтобы использовать флаги, необходимо указать kind параметры и flags следующим образом: kind=regexFlagsflags=.

Пустые строки

Пример Описание
^ в начале текста или строки (m=true)
$ в конце текста (например \z , не\Z) или в строке (m=true)
\A в начале текста
\b на границе слова ASCII (\w с одной стороны и \W, \Aили \z с другой)
\B не на границе слова ASCII
\g в начале искомого подтекста (НЕ ПОДДЕРЖИВАЕТСЯ) PCRE
\G в конце последнего совпадения (НЕ ПОДДЕРЖИВАЕТСЯ) PERL
\Z в конце текста или перед новой строкой в конце текста (НЕ ПОДДЕРЖИВАЕТСЯ)
\z в конце текста
(?=re) перед сопоставлением re текста (НЕ ПОДДЕРЖИВАЕТСЯ)
(?!re) before text not matching re (NOT SUPPORTED)
(?<=re) после сопоставления re текста (НЕ ПОДДЕРЖИВАЕТСЯ)
(?<!re) после несоответствия re текста (НЕ ПОДДЕРЖИВАЕТСЯ)
re& до сопоставления re текста (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
re@= до сопоставления re текста (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
re@! before text not matching re (NOT SUPPORTED) 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

Escape-последовательности

Пример Описание
\a колокольчик (≡ \007)
\f веб-канал формы (≡ \014)
\t горизонтальная вкладка (≡ \011)
\n newline (≡ \012)
\r возврат каретки (≡ \015)
\v символ вертикальной табуляции (≡ \013)
\* литерал *, для любого знака препинания *
\123 восьмеричная кодировка символов (до трех цифр)
\x7F шестнадцатеричный код символов (ровно две цифры)
\x{10FFFF} шестнадцатеричный код символов
\C сопоставление одного байта даже в режиме UTF-8
\Q...\E литеральный текст ... , даже если ... имеет знаки препинания
\1 обратная ссылка (НЕ ПОДДЕРЖИВАЕТСЯ)
\b backspace (НЕ ПОДДЕРЖИВАЕТСЯ) (используйте \010)
\cK control char ^K (NOT SUPPORTED) (use \001 etc)
\e escape (НЕ ПОДДЕРЖИВАЕТСЯ) (используйте \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:] Класс символов ASCII foo
\p{Foo} Класс символов Юникода Foo
\pF Класс F символов Юникода (однобуквенный имя)

Именованные классы символов в качестве элементов класса символов

Пример Описание
[\d] цифры (≡ \d)
[^\d] not digits (≡ \D)
[\D] not digits (≡ \D)
[^\D] not not digits (≡ \d)
[[:name:]] именованный класс ASCII внутри класса символов (≡ [:name:])
[^[:name:]] именованный класс ASCII внутри отрицаемого класса символов (≡ [:^name:])
[\p{Name}] именованное свойство Юникода внутри класса символов \p{Name}(≡ )
[^\p{Name}] именованное свойство Юникода внутри отрицаемого класса символов (≡ \P{Name})

Классы символов Perl

Только ASCII

Пример Описание
\d цифры (≡ [0-9])
\D not digits (≡ [^0-9])
\s пробел (≡ [\t\n\f\r ])
\S не пробел (≡ [^\t\n\f\r ])
\w символы слов (≡ [0-9A-Za-z_])
\W символы не слова (≡ [^0-9A-Za-z_])
\h горизонтальное пространство (НЕ ПОДДЕРЖИВАЕТСЯ)
\H не горизонтальное пространство (НЕ ПОДДЕРЖИВАЕТСЯ)
\v вертикальное пространство (НЕ ПОДДЕРЖИВАЕТСЯ)
\V не вертикальное пространство (НЕ ПОДДЕРЖИВАЕТСЯ)

Классы символов ASCII

Пример Описание
[[:alnum:]] буквенно-цифровой (≡ [0-9A-Za-z])
[[:alpha:]] алфавитный (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] blank (≡ [\t ])
[[:cntrl:]] control (≡ [\x00-\x1F\x7F])
[[:digit:]] цифры (≡ [0-9])
[[:graph:]] графический (≡ [!-~][A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_{ |}~])
[[:lower:]] нижний регистр (≡ [a-z])
[[:print:]] printable (≡ [ -~][ [:graph:]])
[[:punct:]] знаки препинания (≡ [!-/:-@[-{-~])
[[:space:]] пробел (≡ [\t\n\v\f\r ])
[[:upper:]] верхний регистр (≡ [A-Z])
[[:word:]] символы слов (≡ [0-9A-Za-z_])
[[:xdigit:]] шестнадцатеричная цифра (≡ [0-9A-Fa-f])

Имена классов символов Юникода

Общее

Пример Описание
C иное
Cc управляющие
Cf format
Cn неназначенные кодовые точки (НЕ ПОДДЕРЖИВАЕТСЯ)
Co частное использование
Cs Суррогатной
L Письмо
LC буква с регистром (НЕ ПОДДЕРЖИВАЕТСЯ)
L& буква с регистром (НЕ ПОДДЕРЖИВАЕТСЯ)
Ll строчная буква
Lm буква модификатора
Lo другая буква
Lt буква заголовка
Lu прописная буква
M mark
Mc знак интервала
Me включающая метка
Mn знак nonspacing
N number
Nd десятичное число
Nl номер буквы
No другое число
P пунктуация;
Pc знаки препинания соединителя
Pd знаки препинания тире
Pe знаки препинания закрытия
Pf окончательный знак препинания
Pi начальная пунктуация
Po другие знаки препинания
Ps открытые знаки препинания
S символ
Sc символ валюты
Sk символ модификатора
Sm математический символ
So другой символ
Z separator
Zl разделитель строк
Zp разделитель абзаца
Zs разделитель пробелов

Скрипты

Скрипты
Adlam
Ahom
Anatolian_Hieroglyphs
Arabic
Armenian
Avestan
Balinese
Bamum
Bassa_Vah
Batak
Bengali
Bhaiksuki
Bopomofo
Brahmi
Braille
Buginese
Buhid
Canadian_Aboriginal
Carian
Caucasian_Albanian
Chakma
Cham
Cherokee
Chorasmian
Common
Coptic
Cuneiform
Cypriot
Cyrillic
Deseret
Devanagari
Dives_Akuru
Dogra
Duployan
Egyptian_Hieroglyphs
Elbasan
Elymaic
Ethiopic
Georgian
Glagolitic
Gothic
Grantha
Greek
Gujarati
Gunjala_Gondi
Gurmukhi
Han
Hangul
Hanifi_Rohingya
Hanunoo
Hatran
Hebrew
Hiragana
Imperial_Aramaic
Inherited
Inscriptional_Pahlavi
Inscriptional_Parthian
Javanese
Kaithi
Kannada
Katakana
Kayah_Li
Kharoshthi
Khitan_Small_Script
Khmer
Khojki
Khudawadi
Lao
Latin
Lepcha
Limbu
Linear_A
Linear_B
Lisu
Lycian
Lydian
Mahajani
Makasar
Malayalam
Mandaic
Manichaean
Marchen
Masaram_Gondi
Medefaidrin
Meetei_Mayek
Mende_Kikakui
Meroitic_Cursive
Meroitic_Hieroglyphs
Miao
Modi
Mongolian
Mro
Multani
Myanmar
Nabataean
Nandinagari
New_Tai_Lue
Newa
Nko
Nushu
Nyiakeng_Puachue_Hmong
Ogham
Ol_Chiki
Old_Hungarian
Old_Italic
Old_North_Arabian
Old_Permic
Old_Persian
Old_Sogdian
Old_South_Arabian
Old_Turkic
Odia
Osage
Osmanya
Pahawh_Hmong
Palmyrene
Pau_Cin_Hau
Phags_Pa
Phoenician
Psalter_Pahlavi
Rejang
Runic
Samaritan
Saurashtra
Sharada
Shavian
Siddham
SignWriting
Sinhala
Sogdian
Sora_Sompeng
Soyombo
Sundanese
Syloti_Nagri
Syriac
Tagalog
Tagbanwa
Tai_Le
Tai_Tham
Tai_Viet
Takri
Tamil
Tangut
Telugu
Thaana
Thai
Tibetan
Tifinagh
Tirhuta
Ugaritic
Vai
Wancho
Warang_Citi
Yezidi
Yi
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 digits (≡ [0-9]) VIM
\D не \d VIM
\x шестнадцатеричные [0-9A-Fa-f]цифры (≡ ) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\X not \x (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\o восьмеричных цифр (≡ [0-7]) (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\O not \o (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\w символ слова VIM
\W не \w VIM
\h head of word character (NOT SUPPORTED) VIM
\H not \h (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\a алфавитный (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\A not \a (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\l VIM в нижнем регистре (НЕ ПОДДЕРЖИВАЕТСЯ)
\L не в нижнем регистре (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\u VIM в верхнем регистре (НЕ ПОДДЕРЖИВАЕТСЯ)
\U не прописные буквы (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\_x \x плюс новая строка, для любого x (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\c игнорировать регистр (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\C match case (NOT SUPPORTED) VIM
\m magic (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\M nomagic (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\v verymagic (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\V verynomagic (НЕ ПОДДЕРЖИВАЕТСЯ) VIM
\Z игнорировать различия в сочетании символов Юникода (НЕ ПОДДЕРЖИВАЕТСЯ) VIM

Волшебная команда

Пример Описание
(?{code}) произвольный код Perl (НЕ ПОДДЕРЖИВАЕТСЯ) PERL
(??{code}) отложенный произвольный код Perl (НЕ ПОДДЕРЖИВАЕТСЯ) PERL
(?n) рекурсивный вызов группы n записи regexp (НЕ ПОДДЕРЖИВАЕТСЯ)
(?+n) рекурсивный вызов относительной группы +n (НЕ ПОДДЕРЖИВАЕТСЯ)
(?-n) рекурсивный вызов относительной группы -n (НЕ ПОДДЕРЖИВАЕТСЯ)
(?C) Выноска PCRE (НЕ ПОДДЕРЖИВАЕТСЯ) PCRE
(?R) рекурсивный вызов всего regexp (≡ (?0)) (НЕ ПОДДЕРЖИВАЕТСЯ)
(?&name) рекурсивный вызов именованной группы (НЕ ПОДДЕРЖИВАЕТСЯ)
(?P=name) именованной обратной ссылки (НЕ ПОДДЕРЖИВАЕТСЯ)
(?P>name) рекурсивный вызов именованной группы (НЕ ПОДДЕРЖИВАЕТСЯ)
(?(cond)true\|false) условная ветвь (НЕ ПОДДЕРЖИВАЕТСЯ)
(?(cond)true) условная ветвь (НЕ ПОДДЕРЖИВАЕТСЯ)
(*ACCEPT) сделать regexps больше похожими на Prolog (НЕ ПОДДЕРЖИВАЕТСЯ)
(*COMMIT) (НЕ ПОДДЕРЖИВАЕТСЯ)
(*F) (НЕ ПОДДЕРЖИВАЕТСЯ)
(*FAIL) (НЕ ПОДДЕРЖИВАЕТСЯ)
(*MARK) (НЕ ПОДДЕРЖИВАЕТСЯ)
(*PRUNE) (НЕ ПОДДЕРЖИВАЕТСЯ)
(*SKIP) (НЕ ПОДДЕРЖИВАЕТСЯ)
(*THEN) (НЕ ПОДДЕРЖИВАЕТСЯ)
(*ANY) set newline convention (NOT SUPPORTED)
(*ANYCRLF) (НЕ ПОДДЕРЖИВАЕТСЯ)
(*CR) (НЕ ПОДДЕРЖИВАЕТСЯ)
(*CRLF) (НЕ ПОДДЕРЖИВАЕТСЯ)
(*LF) (НЕ ПОДДЕРЖИВАЕТСЯ)
(*BSR_ANYCRLF) set \R convention (NOT SUPPORTED) PCRE
(*BSR_UNICODE) (НЕ ПОДДЕРЖИВАЕТСЯ) PCRE