Składnia wyrażenia regularnego
Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Ten artykuł zawiera omówienie składni wyrażeń regularnych obsługiwanych przez język zapytań Kusto (KQL).
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
, parse
i 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 jest reprezentowane w języku KQL jako "\\A"
. Dodatkowy ukośnik odwrotny wskazuje, że drugi ukośnik odwrotny jest częścią wyrażenia \A
regularnego .
W poniższych sekcjach dokumentacji składni wyrażeń regularnych obsługiwanych przez usługę Kusto.
Wzorzec | opis |
---|---|
. |
Dowolny znak z wyjątkiem nowego wiersza (zawiera nowy wiersz z flagą s) |
[0-9] |
Dowolna cyfra ASCII |
\d |
Cyfra (\p{Nd} ) |
\D |
Nie cyfra |
\pX |
Klasa znaków Unicode identyfikowana przez jednoliterową nazwę |
\p{Greek} |
Klasa znaków Unicode (ogólna kategoria lub skrypt) |
\PX |
Negowana klasa znaków Unicode zidentyfikowana przez jednoliterową nazwę |
\P{Greek} |
Negowana klasa znaków Unicode (ogólna kategoria lub skrypt) |
Wzorzec | opis |
---|---|
[xyz] |
Dopasowanie klasy znaków x, y lub z (union). |
[^xyz] |
Klasa znaków pasująca do dowolnego znaku z wyjątkiem znaków x, y i z. |
[a-z] |
Klasa znaków pasująca do dowolnego znaku w zakresie a-z. |
[[:alpha:]] |
Klasa znaków ASCII ([A-Za-z]) |
[[:^alpha:]] |
Negowana klasa znaków ASCII ([^A-Za-z]) |
[x[^xyz]] |
Zagnieżdżone/grupowane klasy znaków (pasujące do dowolnego znaku z wyjątkiem y i z) |
[a-y&&xyz] |
Skrzyżowanie (pasujące x lub y) |
[0-9&&[^4]] |
Odejmowanie przy użyciu przecięcia i negacji (dopasowanie 0–9 z wyjątkiem 4) |
[0-9--4] |
Odejmowanie bezpośrednie (dopasowanie 0–9 z wyjątkiem 4) |
[a-g~~b-h] |
Różnica symetryczna (dopasowywanie a i h tylko) |
[\[\]] |
Ucieczka w klasach znaków (dopasowanie [lub ]) |
[a&&b] |
Pusta klasa znaków nie pasuje do niczego |
Uwaga
Każda nazwana klasa znaków może pojawić się wewnątrz klasy znaków w nawiasie [...]
. Na przykład pasuje [\p{Greek}[:digit:]]
do dowolnej cyfry ASCII lub dowolnego punktu kodu w Greek
skrycie. [\p{Greek}&&\pL]
pasuje do greckich liter.
Pierwszeństwo w klasach znaków jest od większości powiązań do najmniejszego powiązania:
- Zakresy:
[a-cd]
==[[a-c]d]
- Unia:
[ab&&bc]
==[[ab]&&[bc]]
- Skrzyżowanie, różnica, różnica symetryczna: Wszystkie mają równoważne pierwszeństwo i są oceniane od lewej do prawej. Na przykład
[\pL--\p{Greek}&&\p{Uppercase}]
==[[\pL--\p{Greek}]&&\p{Uppercase}]
. - Negacja:
[^a-z&&b]
==[^[a-z&&b]]
.
Wzorzec | opis |
---|---|
xy |
Łączenie (x a następnie y ) |
x\|y |
Alternation (x lub y , preferuj x ) |
Wzorzec | opis |
---|---|
x* |
Zero lub więcej x (chciwość) |
x+ |
Co najmniej jeden x (chciwość) |
x? |
Zero lub jeden z x (chciwość) |
x*? |
Zero lub więcej x (niegreedy/leniwy) |
x+? |
Co najmniej jeden x (niegreedy/leniwy) |
x?? |
Zero lub jeden z x (niegreedy/leniwy) |
x{n,m} |
Co najmniej n x i co najwyżej m x (chciwość) |
x{n,} |
Co najmniej n x (chciwość) |
x{n} |
Dokładnie n x |
x{n,m}? |
Co najmniej n x i co najwyżej m x (niegreedy/leniwy) |
x{n,}? |
Co najmniej n x (niegreedy/leniwy) |
x{n}? |
Dokładnie n x |
Wzorzec | opis |
---|---|
^ |
Początek siana (lub początek linii z trybem wielowierszowym) |
$ |
Koniec stosu siana (lub koniec linii z trybem wielowierszowym) |
\A |
Tylko początek siana (nawet z włączonym trybem wielowierszowym) |
\z |
Tylko koniec siana (nawet z włączonym trybem wielowierszowym) |
\b |
Granica wyrazów Unicode (\w po jednej stronie i \W , \A lub \z na drugiej) |
\B |
Nie granica wyrazu Unicode |
\b{start} , \< |
Granica początkowa słowa Unicode (\W\|\A po lewej stronie \w po prawej stronie) |
\b{end} , \> |
Granica końca wyrazu Unicode (\w po lewej stronie \W\|\z po prawej stronie) |
\b{start-half} |
Połowa granicy początku słowa Unicode (\W\|\A po lewej stronie) |
\b{end-half} |
Połowa granicy końca słowa Unicode (\W\|\z po prawej stronie) |
Wzorzec | opis |
---|---|
(exp) |
Ponumerowana grupa przechwytywania (indeksowana przez otwarcie nawiasu) |
(?P<name>exp) |
Nazwana (również numerowana) grupa przechwytywania (nazwy muszą być alfanumeryczne) |
(?<name>exp) |
Nazwana (również numerowana) grupa przechwytywania (nazwy muszą być alfanumeryczne) |
(?:exp) |
Grupa nieuchwytna |
(?flags) |
Ustawianie flag w bieżącej grupie |
(?flags:exp) |
Ustawianie flag dla exp (brak przechwytywania) |
Nazwy grup przechwytywania mogą zawierać tylko alfanumeryczne punkty kodu Unicode, kropki.
, podkreślenia i nawiasy kwadratowe _
[
i ]
. Nazwy muszą zaczynać się od _
punktu kodu alfabetycznego lub alfabetycznego. Alfabetyczne punkty kodu odpowiadają Alphabetic
właściwości Unicode, a punkty kodowe liczbowe odpowiadają unii Decimal_Number
kategorii , Letter_Number
i Other_Number
ogólnych.
Flagi są pojedynczymi znakami. Na przykład (?x)
ustawia flagę x
i (?-x)
czyści flagę x
. Jednocześnie można ustawić lub wyczyścić wiele flag: (?xy)
ustawia flagi x
i y
oraz (?x-y)
ustawia flagę x
i czyści flagę y
. Domyślnie wszystkie flagi są wyłączone, chyba że określono inaczej. Są to:
Flaga | opis |
---|---|
i |
Bez uwzględniania wielkości liter: litery pasują do obu wielkich i małych liter |
m |
Tryb wielowierszowy: ^ i $ dopasuj początek/koniec wiersza |
s |
Zezwalaj na kropkę (.). aby dopasować \n |
R |
Włącza tryb CRLF: gdy jest włączony tryb wielowierszowy, \r\n jest używany |
U |
Zamiana znaczenia i x* x*? |
u |
Obsługa unicode (domyślnie włączona) |
x |
Tryb pełny, ignoruje białe znaki i zezwala na komentarze wiersza (począwszy od # ) |
Należy pamiętać, że w trybie pełnym odstępy są ignorowane wszędzie, w tym w klasach znaków. Aby wstawić biały znak, użyj formularza ucieczki lub literału szesnastkowego. Na przykład \
lub \x20
dla spacji ASCII.
Uwaga
- Flagi można przełączać w ramach wzorca. Na przykład następująca składnia używa dopasowania bez uwzględniania wielkości liter w pierwszej części i dopasowania uwzględniającego wielkość liter w drugiej części:
(?i)a+(?-i)b+
. a+
dopasuje wartośća
lubA
, ale jedyną wartościąb+
jest .b
- Tryb wielowierszowy oznacza
^
i$
nie jest już zgodny tylko na początku lub na końcu danych wejściowych, ale także na początku lub na końcu wierszy. Należy pamiętać, że^
pasuje do nowych wierszy, nawet na końcu danych wejściowych. - Gdy tryb CRLF i tryb wielowierszowy są włączone, wówczas i pasują
\r
do obu i\n
, ale nigdy w środku elementu\r\n
.$
^
- Tryb Unicode można również selektywnie wyłączyć, chociaż tylko wtedy, gdy wynik nie będzie zgodny z nieprawidłowym identyfikatorem UTF-8. Na przykład użycie granicy wyrazu ASCII zamiast granicy wyrazu Unicode może sprawić, że niektóre wyszukiwania wyrażeń regularnych będą działać szybciej:
(?-u:\b).+(?-u:\b)
aby dopasować$$abc$$
element .
Wzorzec | opis |
---|---|
\* |
Literał * , dotyczy wszystkich elementów ASCII z wyjątkiem [0-9A-Za-z<>] |
\a |
Dzwonek (\x07 ) |
\f |
Źródło danych formularzy (\x0C ) |
\t |
Karta Pozioma |
\n |
Nowy wiersz |
\r |
Powrót karetki |
\v |
Karta pionowa (\x0B ) |
\A |
Mecze na początku stosu siana |
\z |
Mecze na końcu siana |
\b |
Asercji granic wyrazów |
\B |
Negowana aseracja granicy słowa |
\b{start} , \< |
Aseracja granicy początku słowa |
\b{end} , \> |
Asercji końca granicy słowa |
\b{start-half} |
Połowa potwierdzenia granicy początku słowa |
\b{end-half} |
Połowa potwierdzenia granicy końca słowa |
\123 |
Kod znaku ósemkowego, maksymalnie trzy cyfry |
\x7F |
Kod znaku szesnastkowego (dokładnie dwie cyfry) |
\x{10FFFF} |
Kod szesnastkowy odpowiadający punktowi kodu Unicode |
\u007F |
Kod znaku szesnastkowego (dokładnie cztery cyfry) |
\u{7F} |
Kod szesnastkowy odpowiadający punktowi kodu Unicode |
\U0000007F |
Kod znaku szesnastkowego (dokładnie osiem cyfr) |
\U{7F} |
Kod szesnastkowy odpowiadający punktowi kodu Unicode |
\p{Letter} |
Unicode, klasa znaków |
\P{Letter} |
Negowana klasa znaków Unicode |
\d , , \s \w |
Perl, klasa znaków |
\D , , \S \W |
Negowana klasa znaków Perl |
Te klasy są oparte na definicjach podanych w języku UTS#18:
Wzorzec | opis |
---|---|
\d |
Ddigit (\p{Nd} ) |
\D |
Nie cyfra |
\s |
Biały znak (\p{White_Space} ) |
\S |
Nie odstępy |
\w |
Znak wyrazu (\p{Alphabetic} \d + \p{Pc} \p{M} \p{Join_Control} + + + ) |
\W |
Znak nie wyrazu |
Te klasy są oparte na definicjach podanych w języku UTS#18:
Wzorzec | opis |
---|---|
[[:alnum:]] |
Alfanumeryczne ([0-9A-Za-z] ) |
[[:alpha:]] |
Alfabetyczne ([A-Za-z] ) |
[[:ascii:]] |
ASCII ([\x00-\x7F] ) |
[[:blank:]] |
Puste ([\t ] ) |
[[:cntrl:]] |
Kontrolka ([\x00-\x1F\x7F] ) |
[[:digit:]] |
Cyfry ([0-9] ) |
[[:graph:]] |
Graficzne ([!-~] ) |
[[:lower:]] |
Małe litery ([a-z] ) |
[[:print:]] |
Drukowanie ([ -~] ) |
[[:punct:]] |
Interpunkcja ([!-/:-@\[-`{-~] ) |
[[:space:]] |
Biały znak ([\t\n\v\f\r ] ) |
[[:upper:]] |
Wielkie litery ([A-Z] ) |
[[:word:]] |
Znaki programu Word ([0-9A-Za-z_] ) |
[[:xdigit:]] |
Cyfra szesnastkowy ([0-9A-Fa-f] ) |
Ta sekcja zawiera wskazówki dotyczące szybkości i użycia zasobów wyrażeń wyrażeń wyrażeń regularnych.
Wyrażenie regularne KQL zapewnia pierwszą klasę obsługi unicode. W wielu przypadkach dodatkowa pamięć wymagana do obsługi formatu Unicode jest niewielka i zwykle nie wpływa na szybkość wyszukiwania.
Poniżej przedstawiono kilka przykładów klas znaków Unicode, które mogą mieć wpływ na użycie pamięci i szybkość wyszukiwania:
Użycie pamięci: wpływ unicode wynika głównie z używania klas znaków Unicode. Klasy znaków Unicode mają zwykle większy rozmiar. Na przykład
\w
klasa znaków domyślnie pasuje do około 140 000 odrębnych punktów kodu. Wymaga to dodatkowej pamięci i może spowolnić kompilację wyrażeń regularnych. Jeśli wymagania mogą być spełnione przez ASCII, zaleca się używanie klas ASCII zamiast klas Unicode. Wersja tylko ASCII może być wyrażona\w
na wiele sposobów, z których wszystkie są równoważne.[0-9A-Za-z_] (?-u:\w) [[:word:]] [\w&&\p{ascii}]
Szybkość wyszukiwania: Unicode jest obsługiwane całkiem dobrze, nawet w przypadku korzystania z dużych klas znaków Unicode. Jednak niektóre z szybszych aparatów wewnętrznych wyrażeń regularnych nie mogą obsłużyć asercji granicy słowa obsługującego Unicode. Jeśli więc nie potrzebujesz asercji granic wyrazów obsługujących unicode, możesz rozważyć użycie
(?-u:\b)
zamiast\b
. Funkcja(?-u:\b)
używa definicji wyrazu tylko ASCII, która może poprawić szybkość wyszukiwania.
Wyrażenie regularne KQL ma silną zdolność rozpoznawania literałów we wzorcu wyrażeń regularnych, co może znacznie przyspieszyć wyszukiwanie. Jeśli to możliwe, uwzględnienie literałów we wzorcu może znacznie poprawić wydajność wyszukiwania. Na przykład w regex \w+@\w+
pierwsze wystąpienia @
są dopasowane, a następnie jest wykonywane \w+
odwrotne dopasowanie w celu znalezienia pozycji początkowej.