Składnia RE2

Ten artykuł zawiera omówienie składni wyrażeń regularnych obsługiwanych przez język zapytań Kusto (KQL), czyli składnię biblioteki RE2.

Istnieje wiele operatorów I funkcji KQL, które wykonują dopasowywanie ciągów, wybieranie i wyodrębnianie z wyrażeniami regularnymi, takimi jak matches regex, parsei replace_regex().

W języku KQL wyrażenia regularne muszą być kodowane jako literały ciągu i postępować zgodnie z regułami cytowania ciągów. Na przykład wyrażenie \A regularne RE2 jest reprezentowane w języku KQL jako "\\A". Dodatkowy ukośnik odwrotny wskazuje, że drugi ukośnik odwrotny jest częścią wyrażenia \Aregularnego .

Omówienie składni

W poniższej tabeli omówiono składnię wyrażeń regularnych RE2, która służy do pisania wyrażeń regularnych w usłudze Kusto.

Składnia, element Opis
Pojedyncze literały Pojedyncze znaki pasują do siebie, z wyjątkiem metacharacters (* + ? ( ) |), które mają unikatowe znaczenie, zgodnie z opisem w poniższych wierszach.
Metaznaki Aby dopasować metatyp dosłownie, uniknij go ukośnikami odwrotnymi. Na przykład wyrażenie \+ regularne jest zgodne z znakiem literału plus (+).
Alternatywa Alternatywne dwa wyrażenia za pomocą polecenia | , aby utworzyć nowe wyrażenie zgodne z jednym z wyrażeń. Na przykład e1 | e2 dopasuje wartość e1 lub e2.
Łączenie Połącz dwa wyrażenia, aby utworzyć nowe wyrażenie zgodne z pierwszym wyrażeniem, po którym następuje drugi. Na przykład e1e2 dopasowania e1 , po których następuje e2.
Powtórzenie Metacharacters ?, +i * są operatorami powtórzeń. Na przykład e1? dopasuje zero lub jedno wystąpienie e1elementu , e1+ pasuje do co najmniej jednego wystąpienia elementu i e1* pasuje do sekwencji zera lub większej liczby, prawdopodobnie różnych ciągówe1, które pasują do e1.

Uwaga

Operatory wyrażeń regularnych są obliczane w tej kolejności: zmiana (|), łączenie (wyrażenia równoległe) i powtórzenie (?, +, *). Użyj nawiasów, aby kontrolować kolejność oceny.

Wyrażenia jednoznakowe

Przykład Opis
. dowolny znak, prawdopodobnie włącznie z nowym wierszem (s=true)
[xyz] character, klasa
[^xyz] negowana klasa znaków
\d Perl, klasa znaków
\D negowana klasa znaków Perl
[[:alpha:]] ASCII, klasa znaków
[[:^alpha:]] negowana klasa znaków ASCII
\pN Klasa znaków Unicode (jednoliterowa nazwa)
\p{Greek} Unicode, klasa znaków
\PN negowana klasa znaków Unicode (jednoliterowa nazwa)
\P{Greek} negowana klasa znaków Unicode

Kompozyty

Przykład Opis
xy x, a następnie y
x\|y x lub y (preferuj x)

Powtórzeń

Przykład Opis
x* zero lub więcej x, preferuj więcej
x+ xco najmniej jeden obiekt , preferuj więcej
x? zero lub jeden x, preferuj jedną
x{n,m} n lub n+1 lub ... lub mx, preferuj więcej
x{n,} n lub więcej x, preferuj więcej
x{n} Dokładnie nx
x*? zero lub więcej x, preferuj mniej
x+? xco najmniej jeden obiekt preferuje mniej
x?? zero lub jeden x, preferuj zero
x{n,m}? n lub n+1 lub ... lub mx, preferuj mniej
x{n,}? n lub więcej x, preferuj mniej
x{n}? Dokładnie nx
x{} (≡ x*) (NIEOBSŁUGIWANE) VIM
x{-} (≡ x*?) (NIEOBSŁUGIWANE) VIM
x{-n} (≡ x{n}?) (NIEOBSŁUGIWANE) VIM
x= (≡ x?) (NIEOBSŁUGIWANE) VIM

Ograniczenie implementacji: formularze zliczania x{n,m}, x{n,}i x{n} odrzucają formularze, które tworzą minimalną lub maksymalną liczbę powtórzeń powyżej 1000. Nieograniczone powtórzenia nie podlegają temu ograniczeniu.

Opętne powtórzenia

Przykład Opis
x*+ zero lub więcej x, posiadania (NIEOBSŁUGIWANE)
x++ xco najmniej jeden , posiadany (NIEOBSŁUGIWANY)
x?+ zero lub jeden x, właściciel (NIEOBSŁUGIWANY)
x{n,m}+ n Lub... lub mx, posiadanie (NIEOBSŁUGIWANE)
x{n,}+ n lub więcej x, właściciel (NIEOBSŁUGIWANE)
x{n}+ dokładnie nx, posiadanie (NIEOBSŁUGIWANE)

Grupowanie

Przykład Opis
(re) ponumerowana grupa przechwytywania (podmecz)
(?P<name>re) nazwany & grupą przechwytywania numerowaną (podpasmowa)
(?<name>re) nazwany & grupą przechwytywania numerowaną (podpasm) (NIEOBSŁUGIWANA)
(?'name're) nazwany & grupą przechwytywania numerowaną (podpasm) (NIEOBSŁUGIWANA)
(?:re) nieuwzwolająca grupa
(?flags) ustaw flagi w bieżącej grupie; bez hermetyzacji
(?flags:re) ustaw flagi podczas ponownego; bez hermetyzacji
(?#text) komentarz (NIEOBSŁUGIWANY)
(?\|x\|y\|z) resetowanie numerowania gałęzi (NIEOBSŁUGIWANE)
(?>re) nieobsługiwane dopasowanie ( re NIEOBSŁUGIWANE)
re@> dopasowanie opętające re (NIEOBSŁUGIWANE) VIM
%(re) NIEuwzwolająca grupa (NIEOBSŁUGIWANA) VIM

Flagi

Przykład Opis
i bez uwzględniania wielkości liter (wartość domyślna false)
m tryb wielowierszowy: ^ i $ dopasuj wiersz początkowy/końcowy oprócz tekstu początku/końca (wartość domyślna false)
s let . match \n (wartość domyślna false)
U niesgreedy: zamiana znaczenia x* i x*?, x+ i x+?itp ( wartość domyślna false)

Składnia flagi to xyz (set) lub -xyz (clear) lub xy-z (set xy, clear z).

Aby używać flag, należy określić kind parametry i flags w następujący sposób: kind=regexflags=regexFlags.

Puste ciągi

Przykład Opis
^ na początku tekstu lub wiersza (m=true)
$ na końcu tekstu (na przykład \z nie\Z) lub wiersza (m=true)
\A na początku tekstu
\b w granicach wyrazów ASCII (\w po jednej stronie i \W, \Alub \z na drugiej)
\B nie w granicach wyrazów ASCII
\g na początku przeszukiwanego podtekstu (NIEOBSŁUGIWANE) PCRE
\G na koniec ostatniego dopasowania (NIEOBSŁUGIWANE) PERL
\Z na końcu tekstu lub przed nowym wierszem na końcu tekstu (NIEOBSŁUGIWANE)
\z na końcu tekstu
(?=re) przed dopasowaniem re tekstu (NIEOBSŁUGIWANE)
(?!re) przed tekstem niezgodnym re (NIEOBSŁUGIWANE)
(?<=re) po dopasowaniu re tekstu (NIEOBSŁUGIWANE)
(?<!re) po braku dopasowania re tekstu (NIEOBSŁUGIWANE)
re& przed dopasowaniem re tekstu (NIEOBSŁUGIWANE) VIM
re@= przed dopasowaniem re tekstu (NIEOBSŁUGIWANE) VIM
re@! przed tekstem, który nie jest zgodny re (NIEOBSŁUGIWANY) VIM
re@<= po dopasowaniu re tekstu (NIEOBSŁUGIWANE) VIM
re@<! po braku dopasowania re tekstu (NIEOBSŁUGIWANE) VIM
\zs ustawia początek dopasowania (= \K) (NIEOBSŁUGIWANE) VIM
\ze zestawy zakończenia dopasowania (NIEOBSŁUGIWANE) VIM
\%^ początek pliku (NIEOBSŁUGIWANE) VIM
\%$ end of file (NOT SUPPORTED) VIM (NIEOBSŁUGIWANE)
\%V na ekranie (NIEOBSŁUGIWANE) VIM
\%# POŁOŻENIE KURSORA (NIEOBSŁUGIWANE) VIM
\%'m znacznik m pozycji (NIEOBSŁUGIWANE) VIM
\%23l w wierszu 23 (NIEOBSŁUGIWANE) VIM
\%23c w kolumnie 23 (NIEOBSŁUGIWANE) VIM
\%23v w kolumnie wirtualnej 23 (NIEOBSŁUGIWANE) VIM

Sekwencje ucieczki

Przykład Opis
\a dzwonek (≡ \007)
\f źródło danych formularzy (≡ \014)
\t karta pozioma (≡ \011)
\n newline (≡ \012)
\r powrót karetki (≡ \015)
\v pionowy znak karty (≡ \013)
\* literał *, dla dowolnego znaku interpunkcyjnego *
\123 kod znaków ósemkowych (maksymalnie trzy cyfry)
\x7F Kod znaku szesnastkowego (dokładnie dwie cyfry)
\x{10FFFF} Kod znaku szesnastkowego
\C dopasowanie pojedynczego bajtu nawet w trybie UTF-8
\Q...\E tekst ... literału, nawet jeśli ... ma znaki interpunkcyjne
\1 backreference (NIEOBSŁUGIWANE)
\b backspace (NIEOBSŁUGIWANE) (użyj \010polecenia )
\cK znak kontroli ^K (NIEOBSŁUGIWANE) (użyj \001 itp.)
\e escape (NIEOBSŁUGIWANE) (użyj \033polecenia )
\g1 backreference (NIEOBSŁUGIWANE)
\g{1} backreference (NIEOBSŁUGIWANE)
\g{+1} backreference (NIEOBSŁUGIWANE)
\g{-1} backreference (NIEOBSŁUGIWANE)
\g{name} nazwane backreference (NIEOBSŁUGIWANE)
\g<name> wywołanie podrzędne (NIEOBSŁUGIWANE)
\g'name' wywołanie podrzędne (NIEOBSŁUGIWANE)
\k<name> nazwane backreference (NIEOBSŁUGIWANE)
\k'name' nazwane backreference (NIEOBSŁUGIWANE)
\lX małe litery X (NIEOBSŁUGIWANE)
\ux wielkie litery x (NIEOBSŁUGIWANE)
\L...\E małe litery tekstowe ... (NIEOBSŁUGIWANE)
\K resetowanie $0 początku (NIEOBSŁUGIWANE)
\N{name} nazwany znak Unicode (NIEOBSŁUGIWANY)
\R podział wiersza (NIEOBSŁUGIWANY)
\U...\E tekst górnej litery ... (NIEOBSŁUGIWANY)
\X rozszerzona sekwencja Unicode (NIEOBSŁUGIWANA)
\%d123 Znak dziesiętny 123 (NIEOBSŁUGIWANY) VIM
\%xFF SZesnastkowy znak FF (NIEOBSŁUGIWANY) VIM
\%o123 ósemkowy znak 123 (NIEOBSŁUGIWANY) VIM
\%u1234 0x1234 znaków Unicode (NIEOBSŁUGIWANE) VIM
\%U12345678 0x12345678 znaków Unicode (NIEOBSŁUGIWANE) VIM

Elementy klasy znaków

Przykład Opis
x pojedynczy znak
A-Z zakres znaków (włącznie)
\d Perl, klasa znaków
[:foo:] Klasa znaków ASCII foo
\p{Foo} Klasa znaków Unicode Foo
\pF Klasa F znaków Unicode (jednoliterowa nazwa)

Nazwane klasy znaków jako elementy klasy znaków

Przykład Opis
[\d] cyfry (≡ \d)
[^\d] nie cyfr (≡ \D)
[\D] nie cyfr (≡ \D)
[^\D] nie cyfr (≡ \d)
[[:name:]] nazwana klasa ASCII wewnątrz klasy znaków (≡ [:name:])
[^[:name:]] nazwana klasa ASCII wewnątrz negowanej klasy znaków (≡ [:^name:])
[\p{Name}] nazwana właściwość Unicode wewnątrz klasy znaków (≡ \p{Name})
[^\p{Name}] nazwana właściwość Unicode wewnątrz negowanej klasy znaków (≡ \P{Name})

Klasy znaków Perl

Tylko ASCII

Przykład Opis
\d cyfry (≡ [0-9])
\D nie cyfr (≡ [^0-9])
\s biały znak (≡ [\t\n\f\r ])
\S nie odstępy (≡ [^\t\n\f\r ])
\w znaki wyrazów (≡ [0-9A-Za-z_])
\W znaki nie wyrazów (≡ [^0-9A-Za-z_])
\h spacja pozioma (NIEOBSŁUGIWANA)
\H nie jest to spacja w poziomie (NIEOBSŁUGIWANA)
\v spacja pionowa (NIEOBSŁUGIWANA)
\V nie jest spacją pionową (NIEOBSŁUGIWANA)

Klasy znaków ASCII

Przykład Opis
[[:alnum:]] alfanumeryczne (≡ [0-9A-Za-z])
[[:alpha:]] alfabetyczne (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] puste (≡ [\t ])
[[:cntrl:]] control (≡ [\x00-\x1F\x7F])
[[:digit:]] cyfry (≡ [0-9])
[[:graph:]] graficzne (≡ ≡ [!-~][A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_{ |}~])
[[:lower:]] małe litery (≡ [a-z])
[[:print:]] drukowanie (≡ ≡ [ -~][ [:graph:]])
[[:punct:]] interpunkcja (≡ [!-/:-@[-{-~])
[[:space:]] biały znak (≡ [\t\n\v\f\r ])
[[:upper:]] wielkie litery (≡ [A-Z])
[[:word:]] znaki wyrazów (≡ [0-9A-Za-z_])
[[:xdigit:]] Cyfra szesnastkowy (≡ [0-9A-Fa-f])

Nazwy klas znaków Unicode

Ogólne

Przykład Opis
C other
Cc — formant
Cf format
Cn nieprzypisane punkty kodu (NIEOBSŁUGIWANE)
Co prywatne użycie
Cs Zastępcze
L Literę
LC litera wielkości liter (NIEOBSŁUGIWANA)
L& litera wielkości liter (NIEOBSŁUGIWANA)
Ll mała litera
Lm litera modyfikatora
Lo inna litera
Lt litera tytułowa
Lu wielka litera
M Mark
Mc znacznik odstępów
Me znak ujęty
Mn znak nienaprawiania
N liczba
Nd liczba dziesiętna
Nl numer litery
No inny numer
P znaki interpunkcyjne
Pc znaki interpunkcyjne łącznika
Pd interpunkcja kreski
Pe zamknij interpunkcję
Pf ostateczna interpunkcja
Pi początkowa interpunkcja
Po inne znaki interpunkcyjne
Ps otwieranie interpunkcji
S — symbol
Sc symbol waluty
Sk symbol modyfikatora
Sm symbol matematyczny
So inny symbol
Z Separator
Zl separator linii
Zp separator akapitu
Zs separator spacji

Skrypty

Skrypty
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

Klasy znaków Vim

Przykład Opis
\i IDENTYFIKATOR ZNAK (NIEOBSŁUGIWANY) VIM
\I \i Z wyjątkiem cyfr (NIEOBSŁUGIWANE) VIM
\k VIM znaku słowa kluczowego (NIEOBSŁUGIWANE)
\K \k Z wyjątkiem cyfr (NIEOBSŁUGIWANE) VIM
\f ZNAK NAZWY pliku (NIEOBSŁUGIWANY) VIM
\F \f Z wyjątkiem cyfr (NIEOBSŁUGIWANE) VIM
\p znak drukowalny (NIEOBSŁUGIWANY) VIM
\P \p Z wyjątkiem cyfr (NIEOBSŁUGIWANE) VIM
\s znak odstępu (≡ [ \t]) (NIEOBSŁUGIWANY) VIM
\S znak spacji innej niżwhite (≡ [^ \t]) (NIEOBSŁUGIWANE) VIM
\d cyfry (≡ [0-9]) VIM
\D nie \d VIM
\x Cyfry szesnastkowy (≡ [0-9A-Fa-f]) (NIEOBSŁUGIWANE) VIM
\X NIE \x (NIEOBSŁUGIWANE) VIM
\o cyfry ósemkowe (≡ [0-7]) (NIEOBSŁUGIWANE) VIM
\O NIE \o (NIEOBSŁUGIWANE) VIM
\w word znak VIM
\W nie \w VIM
\h nagłówek znaku wyrazu (NIEOBSŁUGIWANY) VIM
\H NIE \h (NIEOBSŁUGIWANE) VIM
\a ALFABETYCZNE (NIEOBSŁUGIWANE) VIM
\A NIE \a (NIEOBSŁUGIWANE) VIM
\l małe litery (NIEOBSŁUGIWANE) VIM
\L nie małe litery (NIEOBSŁUGIWANE) VIM
\u wielkich liter (NIEOBSŁUGIWANE) VIM
\U NIE WIELKIE (NIEOBSŁUGIWANE) VIM
\_x \x plus newline, dla dowolnego x (NIEOBSŁUGIWANE) VIM
\c ignoruj wielkość liter (NIEOBSŁUGIWANA) VIM
\C WIELKOŚĆ LITER DOPASOWANIA (NIEOBSŁUGIWANA) VIM
\m magic (NIEOBSŁUGIWANE) VIM
\M NOMAGIC (NIEOBSŁUGIWANE) VIM
\v bardzomagic (NIEOBSŁUGIWANE) VIM
\V bardzomagic (NIEOBSŁUGIWANE) VIM
\Z ignoruj różnice w połączeniu znaków Unicode (NIEOBSŁUGIWANE) VIM

Magii

Przykład Opis
(?{code}) dowolny kod Perl (NIEOBSŁUGIWANY) PERL
(??{code}) odroczone dowolne perl kodu (NIEOBSŁUGIWANE) PERL
(?n) rekursywne wywołanie grupy n przechwytywania regexp (NIEOBSŁUGIWANE)
(?+n) rekursywne wywołanie do grupy +n względnej (NIEOBSŁUGIWANE)
(?-n) rekursywne wywołanie do grupy -n względnej (NIEOBSŁUGIWANE)
(?C) PCRE callout (NIEOBSŁUGIWANE) PCRE
(?R) rekursywne wywołanie całej regexp (≡ (?0)) (NIEOBSŁUGIWANE)
(?&name) rekursywne wywołanie nazwanej grupy (NIEOBSŁUGIWANE)
(?P=name) nazwane backreference (NIEOBSŁUGIWANE)
(?P>name) rekursywne wywołanie nazwanej grupy (NIEOBSŁUGIWANE)
(?(cond)true\|false) gałąź warunkowa (NIEOBSŁUGIWANA)
(?(cond)true) gałąź warunkowa (NIEOBSŁUGIWANA)
(*ACCEPT) utwórz regexps więcej, jak Prolog (NIEOBSŁUGIWANE)
(*COMMIT) (NIEOBSŁUGIWANE)
(*F) (NIEOBSŁUGIWANE)
(*FAIL) (NIEOBSŁUGIWANE)
(*MARK) (NIEOBSŁUGIWANE)
(*PRUNE) (NIEOBSŁUGIWANE)
(*SKIP) (NIEOBSŁUGIWANE)
(*THEN) (NIEOBSŁUGIWANE)
(*ANY) ustaw konwencję nowego wiersza (NIEOBSŁUGIWANA)
(*ANYCRLF) (NIEOBSŁUGIWANE)
(*CR) (NIEOBSŁUGIWANE)
(*CRLF) (NIEOBSŁUGIWANE)
(*LF) (NIEOBSŁUGIWANE)
(*BSR_ANYCRLF) set \R convention (NOT SUPPORTED) PCRE (NIEOBSŁUGIWANE)
(*BSR_UNICODE) (NIEOBSŁUGIWANE) PCRE