Syntaxe regulárních výrazů

Přepněte služby pomocí rozevíracího seznamu Verze . Přečtěte si další informace o navigaci.
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 regexje , parsea 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).
[0-9] Libovolná číslice ASCII.
[^0-9] Libovolný znak, který není číslicí ASCII.
\d Číslice (\p{Nd}).
\D Ne číslice.
\pX Třída znaků Unicode identifikovaná jedním písmenem.
\p{Greek} Třída znaků Unicode (obecná kategorie nebo skript)
\PX Negated Unicode character class identifikovaný jedním písmenem názvu.
\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 kromě 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:

  1. Rozsahy: [a-cd] == [[a-c]d]
  2. Svaz: [ab&&bc] == [[ab]&&[bc]]
  3. 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}].
  4. 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 start-of-line s víceřádkovým režimem.
$ Konec sena nebo konec řádku s víceřádkovým režimem.
\A Pouze začátek haystacku, i když je povolen víceřádkový režim.
\z Pouze konec sena, i když je povolen víceřádkový režim.
\b Hranice slova Unicode s \w jednou stranou a \W, \Anebo \z na druhé.
\B Nejedná se o hranici slova Unicode.
\b{start}, \< Na začátku řetězce a \W\|\A na druhé straně unicode je ohraničení \w slovem.
\b{end}, \> Hranice konce slova unicode s \w jednou stranou a \W\|\z na konci.
\b{start-half} Polovina počátečního slova unicode hranice na \W\|\A začátku hranice.
\b{end-half} Polovina hranice konce slova Unicode s \W\|\z na konci.

Seskupování a příznaky

Vzor Popis
(exp) Číslovaná skupina zachycení (indexovaná levou závorku).
(?P<name>exp) Pojmenovaná skupina zachycení (názvy musí být alfanumerické).
(?<name>exp) Pojmenovaná skupina zachycení (názvy musí být alfanumerické).
(?:exp) Skupina, která se nezachytává.
(?flags) Nastavte příznaky v rámci aktuální skupiny.
(?flags:exp) Nastavte příznaky 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_Numbera Letter_NumberOther_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 xy příznak a (?x-y) příznak vymaže xy . 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í se velká a malá 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 (.). aby se shodovaly \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 #).

Ve 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 nebo A, ale b+ jediné shody b.
  • 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á ^ buď a $\r, ale nikdy uprostřed \n.\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} + \p{M} + \d + \p{Pc} + \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 ovlivnit 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 ovlivnit využití paměti a rychlost vyhledávání:

  • Využití paměti: Účinek 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 více paměti a může zpomalit kompilaci regulárních výrazů. Pokud ASCII splňuje vaše požadavky, použijte místo tříd Unicode 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á 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ů ale 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.