Syntaxe regulárních výrazů
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Tento článek obsahuje přehled syntaxe regulárních výrazů podporovaných dotazovací jazyk Kusto (KQL).
Existuje řada operátorů a funkcí KQL, které provádějí porovnávání řetězců, výběr a extrakci pomocí regulárních výrazů, jako matches regex
je , parse
a replace_regex()
.
V jazyce KQL musí být regulární výrazy kódovány jako řetězcové literály a dodržovat pravidla uvozování řetězců. Například regulární výraz \A
je reprezentován v KQL jako "\\A"
. Zpětné lomítko navíc označuje, že druhé zpětné lomítko je součástí regulárního výrazu \A
.
Syntaxe
Následující části dokumentují syntaxi regulárního výrazu podporovanou Kusto.
Shoda s jedním znakem
Vzor | Popis |
---|---|
. |
Libovolný znak kromě nového řádku (zahrnuje nový řádek s příznakem s příznakem) |
[0-9] |
Libovolná číslice ASCII |
\d |
Číslice (\p{Nd} ) |
\D |
Ne číslice |
\pX |
Třída znaků Unicode identifikovaná názvem jedno písmena |
\p{Greek} |
Třída znaků Unicode (obecná kategorie nebo skript) |
\PX |
Negated Unicode character class identifikovaná jedním písmenem |
\P{Greek} |
Negated Unicode character class (obecná kategorie nebo skript) |
Třídy znaků
Vzor | Popis |
---|---|
[xyz] |
Třída znaků odpovídající x, y nebo z (sjednocení). |
[^xyz] |
Třída znaků odpovídající libovolnému znaku kromě x, y a z. |
[a-z] |
Třída znaků odpovídající libovolnému znaku v rozsahu a-z. |
[[:alpha:]] |
Třída znaků ASCII ([A-Za-z]) |
[[:^alpha:]] |
Negated ASCII character class ([^A-Za-z]) |
[x[^xyz]] |
Vnořená/seskupovací třída znaků (odpovídající libovolnému znaku s výjimkou y a z) |
[a-y&&xyz] |
Průnik (odpovídající x nebo y) |
[0-9&&[^4]] |
Odčítání pomocí průsečíku a negace (odpovídající 0-9 s výjimkou 4) |
[0-9--4] |
Přímé odčítání (odpovídající 0–9 s výjimkou 4) |
[a-g~~b-h] |
Symetrický rozdíl (porovnávání a a h pouze) |
[\[\]] |
Řídicí znak ve třídách znaků (odpovídající [ nebo ]) |
[a&&b] |
Prázdná třída znaků, která neodpovídá nic |
Poznámka:
Každá pojmenovaná třída znaků se může objevit uvnitř třídy závorek [...]
znaků. Například [\p{Greek}[:digit:]]
odpovídá libovolné číslici ASCII nebo libovolnému bodu kódu ve Greek
skriptu. [\p{Greek}&&\pL]
odpovídá řeckým písmenem.
Priorita ve třídách znaků je z většiny vazeb na nejmenší vazbu:
- Rozsahy:
[a-cd]
==[[a-c]d]
- Svaz:
[ab&&bc]
==[[ab]&&[bc]]
- Průnik, rozdíl, symetrický rozdíl: Všechny mají ekvivalentní prioritu a vyhodnocují se zleva doprava. Například
[\pL--\p{Greek}&&\p{Uppercase}]
==[[\pL--\p{Greek}]&&\p{Uppercase}]
. - Negace:
[^a-z&&b]
==[^[a-z&&b]]
.
Kompozity
Vzor | Popis |
---|---|
xy |
Zřetězení (x následované y ) |
x\|y |
Alternace (x nebo y , preferovat x ) |
Opakování
Vzor | Popis |
---|---|
x* |
Nula nebo více x (greedy) |
x+ |
Jeden nebo více x (greedy) |
x? |
Nula nebo jedna z x (greedy) |
x*? |
Nula nebo více x (negreedy/opožděné) |
x+? |
Minimálně jeden z x (negreedy/opožděný) |
x?? |
Nula nebo jedna z x (negreedy/opožděná) |
x{n,m} |
Alespoň n x a nejvýše m x (greedy) |
x{n,} |
Alespoň n x (greedy) |
x{n} |
Přesně n x |
x{n,m}? |
Alespoň n x a maximálně m x (bezgreedy/opožděné) |
x{n,}? |
Alespoň n x (negreedy/opožděný) |
x{n}? |
Přesně n x |
Prázdné shody
Vzor | Popis |
---|---|
^ |
Začátek sena (nebo začátek řádku s víceřádkovým režimem) |
$ |
Konec sena (nebo konec řádku s víceřádkovým režimem) |
\A |
Pouze začátek sena (i s povoleným víceřádkovým režimem) |
\z |
Pouze konec sena (i s povoleným víceřádkovým režimem) |
\b |
Hranice slova Unicode (\w na jedné straně a \W , \A , nebo \z na druhé) |
\B |
Nejedná se o hranici slova Unicode. |
\b{start} , \< |
Hranice slova unicode (\W\|\A vlevo, \w vpravo) |
\b{end} , \> |
Hranice konce slova Unicode (\w vlevo, \W\|\z vpravo) |
\b{start-half} |
Polovina hranice slova unicode (\W\|\A na levé straně) |
\b{end-half} |
Polovina hranice konce slova Unicode (\W\|\z vpravo) |
Seskupování a příznaky
Vzor | Popis |
---|---|
(exp) |
Číslovaná skupina zachycení (indexovaná levou závorku) |
(?P<name>exp) |
Pojmenovaná (také číslovaný) skupina zachycení (názvy musí být alfanumerické) |
(?<name>exp) |
Pojmenovaná (také číslovaný) skupina zachycení (názvy musí být alfanumerické) |
(?:exp) |
Skupina bez zachytávání |
(?flags) |
Nastavení příznaků v rámci aktuální skupiny |
(?flags:exp) |
Nastavení příznaků pro exp (nezachytávání) |
Názvy skupin zachycení mohou obsahovat pouze alfanumerické body kódu Unicode, tečky .
, podtržítka _
a hranaté závorky[
a ]
. Názvy musí začínat znakem _
abecedy. Abecední kódové body odpovídají Alphabetic
vlastnosti Unicode, zatímco číselné body kódu odpovídají sjednocení Decimal_Number
a Letter_Number
Other_Number
obecné kategorie.
Příznaky jsou jednoduché znaky. Například (?x)
nastaví příznak x
a (?-x)
vymaže příznak x
. Najednou můžete nastavit nebo vymazat více příznaků: (?xy)
nastaví příznak i x
y
příznak a (?x-y)
příznak vymaže x
y
. Ve výchozím nastavení jsou všechny příznaky zakázány, pokud není uvedeno jinak. Mezi ně patří:
Příznak | Popis |
---|---|
i |
Nerozlišují malá a velká písmena: Písmena odpovídají velkým i menšímu písmenu. |
m |
Víceřádkový režim: ^ a $ porovná začátek/konec řádku |
s |
Povolit tečku (.). spárovat \n |
R |
Povolí režim CRLF: pokud je povolený víceřádkový režim, \r\n použije se |
U |
Prohození významu x* a x*? |
u |
Podpora unicode (ve výchozím nastavení povolená) |
x |
Podrobný režim, ignoruje prázdné znaky a povolí řádkové komentáře (počínaje # ) |
Všimněte si, že v podrobném režimu se prázdné znaky ignorují všude, včetně tříd znaků. Pokud chcete vložit prázdné znaky, použijte jeho řídicí tvar nebo šestnáctkový literál. Například \
pro \x20
mezeru v ASCII.
Poznámka:
- Příznaky lze přepínat v rámci vzoru. Například následující syntaxe používá shodu nerozlišující malá a velká písmena pro první část a shodu s rozlišováním velkých a malých písmen pro druhou část:
(?i)a+(?-i)b+
. a+
odpovídá buďa
neboA
, aleb+
jediné shodyb
.- Režim víceřádkového režimu znamená
^
, že$
se už neshoduje jen na začátku nebo na konci vstupu, ale také na začátku nebo na konci řádků. Všimněte si, že^
odpovídá za novými řádky, a to i na konci vstupu. - Pokud je povolen režim CRLF i víceřádkový režim, pak a porovná
\r
buď a$
\n
, ale nikdy uprostřed\r\n
.^
- Režim Unicode lze také selektivně zakázat, i když se výsledek neshoduje s neplatným kódováním UTF-8. Například použití hranice slova ASCII místo hranice slova Unicode může zrychlit hledání regulárních výrazů:
(?-u:\b).+(?-u:\b)
aby odpovídaly$$abc$$
.
Řídicí sekvence
Vzor | Popis |
---|---|
\* |
Literál * , platí pro všechny ASCII s výjimkou [0-9A-Za-z<>] |
\a |
Zvonek (\x07 ) |
\f |
Informační kanál formuláře (\x0C ) |
\t |
Horizontální tabulátor |
\n |
Nový řádek |
\r |
Návrat na začátek řádku |
\v |
Svislá karta (\x0B ) |
\A |
Odpovídá na začátku sena |
\z |
Zápasy na konci sena |
\b |
Kontrolní výraz hranice slova |
\B |
Kontrolní výraz hranice negated slova |
\b{start} , \< |
Počáteční výraz hranice slova |
\b{end} , \> |
Kontrolní výraz hranice konce slova |
\b{start-half} |
Polovina kontrolního výrazu hranice začátku slova |
\b{end-half} |
Polovina kontrolního výrazu hranice konce slova |
\123 |
Osmičkový kód znaku, až tři číslice |
\x7F |
Šestnáctkový znakový kód (přesně dvě číslice) |
\x{10FFFF} |
Šestnáctkový kód znaku odpovídající bodu kódu Unicode |
\u007F |
Šestnáctkový znakový kód (přesně čtyři číslice) |
\u{7F} |
Šestnáctkový kód znaku odpovídající bodu kódu Unicode |
\U0000007F |
Šestnáctkový znakový kód (přesně osm číslic) |
\U{7F} |
Šestnáctkový kód znaku odpovídající bodu kódu Unicode |
\p{Letter} |
Znaková třída Unicode |
\P{Letter} |
Negated Unicode character class |
\d , , \s \w |
Perl character – třída |
\D , , \S \W |
Negated Perl character – třída |
Třídy znaků Perl (popisné pro Unicode)
Tyto třídy jsou založené na definicích poskytovaných v UTS#18:
Vzor | Popis |
---|---|
\d |
Ddigit (\p{Nd} ) |
\D |
Neciferné číslo |
\s |
Prázdné znaky (\p{White_Space} ) |
\S |
Prázdné znaky |
\w |
Znak wordu (\p{Alphabetic} \d + \p{Pc} \p{M} \p{Join_Control} + + + ) |
\W |
Neslovný znak |
Třídy znaků ASCII
Tyto třídy jsou založené na definicích poskytovaných v UTS#18:
Vzor | Popis |
---|---|
[[:alnum:]] |
Alfanumerické ([0-9A-Za-z] ) |
[[:alpha:]] |
Abecední ([A-Za-z] ) |
[[:ascii:]] |
ASCII ([\x00-\x7F] ) |
[[:blank:]] |
Prázdné ([\t ] ) |
[[:cntrl:]] |
Ovládací prvek ([\x00-\x1F\x7F] ) |
[[:digit:]] |
Číslice ([0-9] ) |
[[:graph:]] |
Grafické ([!-~] ) |
[[:lower:]] |
Malé písmeno ([a-z] ) |
[[:print:]] |
Tisknutelné ([ -~] ) |
[[:punct:]] |
Interpunkce ([!-/:-@\[-`{-~] ) |
[[:space:]] |
Prázdné znaky ([\t\n\v\f\r ] ) |
[[:upper:]] |
Velká písmena ([A-Z] ) |
[[:word:]] |
Znaky wordu ([0-9A-Za-z_] ) |
[[:xdigit:]] |
Šestnáctkové číslice ([0-9A-Fa-f] ) |
Výkon
Tato část obsahuje některé pokyny k rychlosti a využití prostředků výrazů regulárních výrazů.
Unicode může mít vliv na využití paměti a rychlost vyhledávání.
Regex KQL poskytuje prvotřídní podporu pro Unicode. V mnoha případech je dodatečná paměť potřebná k podpoře Unicode zanedbatelná a obvykle nemá vliv na rychlost vyhledávání.
Následuje několik příkladů tříd znaků Unicode, které můžou mít vliv na využití paměti a rychlost vyhledávání:
Využití paměti: Vliv unicode primárně vzniká z použití tříd znaků Unicode. Třídy znaků Unicode mají tendenci být větší. Třída znaků například
\w
ve výchozím nastavení odpovídá přibližně 140 000 odlišným bodům kódu. To vyžaduje další paměť a může zpomalit kompilaci regulárních výrazů. Pokud vaše požadavky může ASCII splnit, doporučuje se místo tříd Unicode používat třídy ASCII. Verze\w
pouze ASCII může být vyjádřena několika způsoby, z nichž všechny jsou ekvivalentní.[0-9A-Za-z_] (?-u:\w) [[:word:]] [\w&&\p{ascii}]
Rychlost vyhledávání: Unicode se obvykle zpracovává docela dobře, i když používáte velké třídy znaků Unicode. Některé z rychlejších interních modulů regulárních výrazů však nedokážou zpracovat kontrolní výraz hranice slova v kódu Unicode. Pokud tedy nepotřebujete kontrolní výrazy hranice slov podporující unicode, můžete místo toho zvážit použití
(?-u:\b)
\b
. Používá(?-u:\b)
definici znaku slova pouze ASCII, která může zlepšit rychlost vyhledávání.
Literály můžou zrychlit hledání.
Regulární výraz KQL má silnou schopnost rozpoznávat literály v rámci vzoru regulárních výrazů, což může výrazně urychlit vyhledávání. Pokud je to možné, včetně literálů ve vašem vzoru, může výrazně zlepšit výkon hledání. Například v regulárním výrazu \w+@\w+
se první výskyty @
shodují a pak se provede zpětná shoda, aby \w+
bylo možné najít počáteční pozici.