Udostępnij za pośrednictwem


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 języka KQL, które wykonują dopasowywanie ciągów, wybór i wyodrębnianie za pomocą wyrażeń regularnych, takich jak matches regex, parsei replace_regex().

W języku KQL wyrażenia regularne muszą być zakodowane jako literały ciągu i postępować zgodnie z regułami cudzysłowów 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żenia regularnego RE2, która służy do zapisywania 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.
Metacharacters Aby dopasować metacharakter dosłownie, uniknij go ukośnikami odwrotnymi. Na przykład wyrażenie \+ regularne pasuje do znaku 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 pasuje do elementu e1 lub e2.
Łączenie Połącz dwa wyrażenia, aby utworzyć nowe wyrażenie zgodne z pierwszym wyrażeniem, po którym następuje druga. Na przykład e1e2 dopasowania e1 , po których e2następuje .
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 zero lub więcej, prawdopodobnie różnych ciągówe1, które pasują do e1.

Uwaga

Operatory wyrażeń regularnych oceniają w tej kolejności: przemienność (), łą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] klasa znaków
[^xyz] negowana klasa znaków
\d Perl, klasa znaków
\D negowana klasa znaków Perl
[[:alpha:]] Klasa znaków ASCII
[[:^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 , preferuj więcej
x? zero lub jeden x, preferuj jeden
x{n,m} n lub n+1 lub ... lub m x, preferuj więcej
x{n,} n lub więcej x, preferuj więcej
x{n} dokładnie n x
x*? zero lub więcej x, preferuj mniej
x+? xco najmniej jeden , preferuj mniej
x?? zero lub jeden x, preferuj zero
x{n,m}? n lub n+1 lub ... lub m x, preferuj mniej
x{n,}? n lub więcej x, preferuj mniej
x{n}? dokładnie n x
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.

Przywłaszcze powtórzenia

Przykład opis
x*+ zero lub więcej x, posiadanie (NIEOBSŁUGIWANE)
x++ xco najmniej jeden , opętany (NIEOBSŁUGIWANY)
x?+ zero lub jeden x, opętny (NIEOBSŁUGIWANY)
x{n,m}+ n lub... lub m x, opętany (NIEOBSŁUGIWANY)
x{n,}+ n lub więcej x, opętanych (NIEOBSŁUGIWANE)
x{n}+ dokładnie n x, posiadanie (NIEOBSŁUGIWANE)

Grupowanie

Przykład opis
(re) grupę przechwytywania numerowanego (podpasowanie)
(?P<name>re) nazwana i numerowana grupa przechwytywania (podmatch)
(?<name>re) nazwane i numerowane przechwytywanie grupy (podmatch) (NIEOBSŁUGIWANE)
(?'name're) nazwane i numerowane przechwytywanie grupy (podmatch) (NIEOBSŁUGIWANE)
(?:re) grupa niepochodząca
(?flags) ustaw flagi w bieżącej grupie; noncapturing
(?flags:re) ustawiać flagi podczas ponownego; noncapturing
(?#text) komentarz (NIEOBSŁUGIWANY)
(?\|x\|y\|z) resetowanie numerowania gałęzi (NIEOBSŁUGIWANE)
(?>re) dopasowanie nieobsługiwane ( re NIEOBSŁUGIWANE)
re@> dopasowanie opętające (NIEOBSŁUGIWANE re ) VIM
%(re) NIEobsługiwana 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 rozpoczynającego/końcowego (wartość domyślna false)
s let . match \n (wartość domyślna false)
U ungreedy: znaczenie zamiany 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żyć flag, należy określić parametry i flags w następujący sposób: kind= regex flags= regexFlags.kind

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 granicy 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 niedopasowaniem re tekstu (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 niedopasowanie re tekstu (NIEOBSŁUGIWANE) 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
\%$ koniec pliku (NIEOBSŁUGIWANE) VIM
\%V na ekranie (NIEOBSŁUGIWANE) VIM
\%# POŁOŻENIE KURSORA (NIEOBSŁUGIWANE) VIM
\%'m ZNACZNIK m POŁOŻENIE (NIEOBSŁUGIWANE) VIM
\%23l w wierszu 23 (NIEOBSŁUGIWANE) VIM
\%23c w kolumnie 23 (NIEOBSŁUGIWANE) VIM
\%23v w wirtualnej kolumnie 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 powrotu karetki (≡ \015)
\v znak karty pionowej (≡ \013)
\* literał *, dla dowolnego znaku interpunkcyjnego *
\123 kod ósemkowego znaku (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 polecenia \010)
\cK znak kontrolki ^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 ( ... NIEOBSŁUGIWANE)
\K reset początku $0 (NIEOBSŁUGIWANE)
\N{name} nazwany znak Unicode (NIEOBSŁUGIWANY)
\R podział wiersza (NIEOBSŁUGIWANY)
\U...\E tekst ... wielkie litery (NIEOBSŁUGIWANE)
\X rozszerzona sekwencja Unicode (NIEOBSŁUGIWANA)
\%d123 ZNAK DZIESIĘTNY 123 (NIEOBSŁUGIWANY) VIM
\%xFF SZESNASTKOWY ZNAK FF (NIEOBSŁUGIWANY) VIM
\%o123 ósemkowe znaki 123 (NIEOBSŁUGIWANE) VIM
\%u1234 ViM znaku Unicode 0x1234 (NIEOBSŁUGIWANE)
\%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} Unicode, klasa znaków 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 nie znaków wyrazów (≡ [^0-9A-Za-z_])
\h spacja pozioma (NIEOBSŁUGIWANA)
\H brak miejsca w poziomie (NIEOBSŁUGIWANE)
\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:]] blank (≡ [\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 użycie prywatne
Cs Zastępcze
L litera
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 znacznik
Mc znak odstępu
Me znak ujęty
Mn znacznik nieprzyciągowy
N Liczba
Nd liczba dziesiętna
Nl numer litery
No inny numer
P znaki interpunkcyjne
Pc znak interpunkcyjny łącznika
Pd interpunkcja kreski
Pe zamknij znak interpunkcyjny
Pf końcowa interpunkcja
Pi początkowa interpunkcja
Po inne znaki interpunkcyjne
Ps otwarta interpunkcja
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 ZNAK IDENTYFIKATORA (NIEOBSŁUGIWANE) 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 [^ \t]innej niżwhite (≡ ) (NIEOBSŁUGIWANE) VIM
\d cyfry (≡ [0-9]) VIM
\D nie \d VIM
\x Cyfry szesnastkowej (≡ [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 znak wyrazu VIM
\W nie \w VIM
\h znak nagłówka 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 wielkie litery (NIEOBSŁUGIWANE) VIM
\U NIE WIELKIE (NIEOBSŁUGIWANE) VIM
\_x \x plus newline, dla dowolnego x (NIEOBSŁUGIWANE) VIM
\c ignoruj wielkość liter (NIEOBSŁUGIWANE) VIM
\C wielkość liter dopasowania (NIEOBSŁUGIWANA) VIM
\m magic (NIEOBSŁUGIWANE) VIM
\M NOMAGIC (NIEOBSŁUGIWANE) VIM
\v bardzomagic (NIEOBSŁUGIWANE) VIM
\V VIM verynomagic (NIEOBSŁUGIWANE)
\Z ignoruj różnice w standardach Unicode łączących znaki (NIEOBSŁUGIWANE) VIM

Magia

Przykład opis
(?{code}) dowolny kod Perl (NIEOBSŁUGIWANY) PERL
(??{code}) przełożone dowolne perl kodu (NIEOBSŁUGIWANE) PERL
(?n) rekursywne wywołanie do grupy przechwytywania n regexp (NIEOBSŁUGIWANE)
(?+n) rekursywne wywołanie grupy +n względnej (NIEOBSŁUGIWANE)
(?-n) rekursywne wywołanie grupy -n względnej (NIEOBSŁUGIWANE)
(?C) OBJAŚNIENIE PCRE (NIEOBSŁUGIWANE) PCRE
(?R) rekursywne wywołanie do całego regexp (≡ (?0)) (NIEOBSŁUGIWANE)
(?&name) wywołanie cykliczne do nazwanej grupy (NIEOBSŁUGIWANE)
(?P=name) nazwane backreference (NIEOBSŁUGIWANE)
(?P>name) wywołanie cykliczne do 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ŁUGIWANE)
(*ANYCRLF) (NIEOBSŁUGIWANE)
(*CR) (NIEOBSŁUGIWANE)
(*CRLF) (NIEOBSŁUGIWANE)
(*LF) (NIEOBSŁUGIWANE)
(*BSR_ANYCRLF) set \R convention (NOT SUPPORTED) PCRE
(*BSR_UNICODE) (NIEOBSŁUGIWANE) PCRE