Regex söz dizimi

Şunlar için geçerlidir: ✅Microsoft Fabric✅Azure Veri Gezgini Azure İzleyiciMicrosoft Sentinel

Bu makalede, Kusto Sorgu Dili (KQL) tarafından desteklenen normal ifade söz dizimine genel bir bakış sağlanır.

, ve gibi matches regexparsenormal ifadelerle dize eşleştirme, seçim ve ayıklama gerçekleştiren bir dizi KQL işleci ve replace_regex()işlevi vardır.

KQL'de normal ifadelerin dize değişmez değerleri olarak kodlanması ve dize alıntılama kurallarına uyması gerekir. Örneğin, normal ifade \A KQL'de olarak "\\A"temsil edilir. Ek ters eğik çizgi, diğer ters eğik çizginin normal ifadesinin \Abir parçası olduğunu gösterir.

Sözdizimi

Aşağıdaki bölümlerde Kusto tarafından desteklenen normal ifade söz dizimi belgelenmektedir.

Bir karakter eşleştir

Desen Açıklama
. Yeni satır dışında herhangi bir karakter (s bayrağıyla yeni satır içerir)
[0-9] Herhangi bir ASCII rakamı
\d Basamak (\p{Nd})
\D Basamak değil
\pX Tek harfli bir adla tanımlanan Unicode karakter sınıfı
\p{Greek} Unicode karakter sınıfı (genel kategori veya betik)
\PX Tek harfli bir adla tanımlanan olumsuz unicode karakter sınıfı
\P{Greek} Olumsuz unicode karakter sınıfı (genel kategori veya betik)

Karakter sınıfları

Desen Açıklama
[xyz] x, y veya z (birleşim) ile eşleşen karakter sınıfı.
[^xyz] x, y ve z dışında herhangi bir karakterle eşleşen karakter sınıfı.
[a-z] a-z aralığındaki herhangi bir karakterle eşleşen karakter sınıfı.
[[:alpha:]] ASCII karakter sınıfı ([A-Za-z])
[[:^alpha:]] Olumsuz ASCII karakter sınıfı ([^A-Za-z])
[x[^xyz]] İç içe/gruplandırma karakter sınıfı (y ve z dışında herhangi bir karakterle eşleşen)
[a-y&&xyz] Kesişim (eşleşen x veya y)
[0-9&&[^4]] Kesişim ve olumsuzlama kullanarak çıkarma (4 dışında eşleşen 0-9)
[0-9--4] Doğrudan çıkarma (4 dışında eşleşen 0-9)
[a-g~~b-h] Simetrik fark (eşleşen a ve h yalnızca)
[\[\]] Karakter sınıflarında kaçış (eşleşen [ veya ])
[a&&b] Boş karakter sınıfı hiçbir şey eşleştirmez

Not

Adlandırılmış herhangi bir karakter sınıfı köşeli ayraçlı [...] karakter sınıfının içinde görünebilir. Örneğin, [\p{Greek}[:digit:]] betikteki herhangi bir ASCII rakamı veya herhangi bir kod noktasıyla eşleşir Greek . [\p{Greek}&&\pL] Yunanca harflerle eşleşir.

Karakter sınıflarındaki öncelik, çoğu bağlamadan en az bağlamaya kadardır:

  1. Aralık: [a-cd] == [[a-c]d]
  2. Sendika: [ab&&bc] == [[ab]&&[bc]]
  3. Kesişim, fark, simetrik fark: Tümü eşdeğer önceliğe sahiptir ve soldan sağa değerlendirilir. Örneğin, [\pL--\p{Greek}&&\p{Uppercase}] == [[\pL--\p{Greek}]&&\p{Uppercase}].
  4. Olumsuzlama: [^a-z&&b] == [^[a-z&&b]].

Kompozit

Desen Açıklama
xy Birleştirme (x ve ardından y)
x\|y Değişim (x veya y , tercih )x

Tekrarlamaların

Desen Açıklama
x* Sıfır veya daha fazla x (doyumsuz)
x+ Bir veya daha fazla x (doyumsuz)
x? Sıfır veya x'in biri (doyumsuz)
x*? Sıfır veya daha fazla x (yeşil olmayan/gecikmeli)
x+? Bir veya daha fazla x (yeşil olmayan/tembel)
x?? X'in sıfır veya biri (yeşil olmayan/gecikmeli)
x{n,m} En az n x ve en çok m x (doyumsuz)
x{n,} En az n x (doyumsuz)
x{n} Tam olarak n x
x{n,m}? En az n x ve en çok m x (yeşil olmayan/tembel)
x{n,}? En az n x (yeşil olmayan/tembel)
x{n}? Tam olarak n x

Boş eşleşmeler

Desen Açıklama
^ Samanlık başlangıcı (veya çok satırlı mod ile satır başlangıcı)
$ Samanlık sonu (veya çok satırlı mod ile satır sonu)
\A Bir saman yığınının yalnızca başlangıcı (çok hatlı mod etkin olsa bile)
\z Bir saman yığınının yalnızca ucu (çok hatlı mod etkin olsa bile)
\b Unicode sözcük sınırı (\w bir tarafta ve \W, \Aveya \z başka bir tarafta)
\B Unicode sözcük sınırı değil
\b{start}, \< Unicode sözcük başlangıcı sınırı (\W\|\A solda, \w sağda)
\b{end}, \> Unicode sözcük sonu sınırı (\w solda, \W\|\z sağda)
\b{start-half} Unicode sözcük başlangıcı sınırının yarısı (\W\|\A solda)
\b{end-half} Unicode sözcük sonu sınırının yarısı (\W\|\z sağda)

Gruplandırma ve bayraklar

Desen Açıklama
(exp) Numaralandırılmış yakalama grubu (parantez açılarak dizine alınır)
(?P<name>exp) Adlandırılmış (ayrıca numaralandırılmış) yakalama grubu (adlar alfasayısal olmalıdır)
(?<name>exp) Adlandırılmış (ayrıca numaralandırılmış) yakalama grubu (adlar alfasayısal olmalıdır)
(?:exp) Yakalama olmayan grup
(?flags) Geçerli grup içinde bayrakları ayarlama
(?flags:exp) İfade (yakalama olmayan) için bayrakları ayarlama

Yakalama grubu adları yalnızca alfasayısal Unicode kod noktaları, noktalar ., alt çizgi _ve köşeli ayraçlar[ ve ]içerebilir. Adlar bir _ veya alfabetik kod noktasıyla başlamalıdır. Alfabetik kod noktaları Unicode özelliğineAlphabetic, sayısal kod noktaları ise öğesinin Letter_Number ve Other_Number genel kategorilerin birleşimine Decimal_Numberkarşılık gelir.

Bayraklar tek karakterdir. Örneğin, (?x) bayrağını x ayarlar ve (?-x) bayrağını xtemizler. Aynı anda birden çok bayrak ayarlanabilir veya temizlenebilir: hem ve y bayraklarını ayarlar hem (?x-y) de x bayrağı ayarlar x ve bayrağı temizlery. (?xy) Varsayılan olarak, aksi belirtilmedikçe tüm bayraklar devre dışı bırakılır. Bunlar:

Bayrak Açıklama
i Büyük/küçük harfe duyarsız: harfler hem büyük hem de küçük harfle eşleşti
m Çok satırlı mod: ^ ve $ satırın başlangıcı/sonuyla eşleş
s Noktaya izin ver (.). eşleştirmek için \n
R CRLF modunu etkinleştirir: Çok satırlı mod etkinleştirildiğinde kullanılır \r\n
U ve anlamlarını x* değiştirme x*?
u Unicode desteği (varsayılan olarak etkindir)
x Ayrıntılı mod, boşluğu yoksayar ve satır açıklamalarına izin verir (ile #başlayarak)

Ayrıntılı modda, karakter sınıfları dahil olmak üzere boşluk her yerde yoksayılır. Boşluk eklemek için kaçış biçimini veya onaltılık değişmez değeri kullanın. Örneğin, \ \x20 ASCII alanı için.

Not

  • Bayraklar bir düzen içinde değiştirilebilir. Örneğin, aşağıdaki söz diziminde ilk bölüm için büyük/küçük harfe duyarlı olmayan bir eşleşme ve ikinci bölüm için büyük/küçük harfe duyarlı eşleşme kullanılır: (?i)a+(?-i)b+.
  • a+a veya Aile eşleşirb+, ancak yalnızca ile eşleşirb.
  • Çok satırlı mod, girişin yalnızca başında veya sonunda değil, aynı zamanda satırların başında veya sonunda da eşleşme anlamına gelir ^ ve $ artık eşleşmez. Girişin sonunda bile yeni satırlardan sonra eşleşeceğini ^ unutmayın.
  • Hem CRLF modu hem de çok satırlı mod etkinleştirildiğinde ve ^ ve ile eşleştiğinde\r, ancak hiçbir zaman ortasında olmaz\r\n.\n$
  • Unicode modu, yalnızca sonuç geçersiz UTF-8 ile eşleşmese de seçmeli olarak devre dışı bırakılabilir. Örneğin, Unicode sözcük sınırı yerine ASCII sözcük sınırı kullanmak, bazı regex aramalarının daha hızlı çalışmasını sağlayabilir: (?-u:\b).+(?-u:\b) ile eşleşecek $$abc$$şekilde.

Çıkış sıraları

Desen Açıklama
\* *değişmez değeri, dışındaki tüm ASCII'lere uygulanır[0-9A-Za-z<>]
\a Zil (\x07)
\f Form akışı (\x0C)
\t Yatay sekme
\n Yeni satır
\r Satır başı
\v Dikey sekme (\x0B)
\A Saman yığınının başındaki eşleşmeler
\z Saman yığınının sonundaki eşleşmeler
\b Sözcük sınırı onaylama
\B Olumsuz sözcük sınırı onayı
\b{start}, \< Sözcük başlangıcı sınır onayı
\b{end}, \> Sözcük sonu sınırı onaylama
\b{start-half} Sözcük başlangıcı sınırı onaylamasının yarısı
\b{end-half} Sözcük sonu sınırı onayının yarısı
\123 Sekizli karakter kodu, en çok üç basamak
\x7F Onaltılık karakter kodu (tam olarak iki basamak)
\x{10FFFF} Unicode kod noktasına karşılık gelen onaltılık karakter kodu
\u007F Onaltılık karakter kodu (tam dört basamak)
\u{7F} Unicode kod noktasına karşılık gelen onaltılık karakter kodu
\U0000007F Onaltılık karakter kodu (tam sekiz basamak)
\U{7F} Unicode kod noktasına karşılık gelen onaltılık karakter kodu
\p{Letter} Unicode karakter sınıfı
\P{Letter} Olumsuz unicode karakter sınıfı
\d, \s, \w Perl karakter sınıfı
\D, \S, \W Negatif Perl karakter sınıfı

Perl karakter sınıfları (Unicode dostu)

Bu sınıflar UTS#18'de sağlanan tanımları temel alır:

Desen Açıklama
\d Ddigit (\p{Nd})
\D Basamak değil
\s Boşluk (\p{White_Space})
\S Boşluk değil
\w Sözcük karakteri (\p{Alphabetic}\p{Join_Control} + + + \p{Pc} + \p{M}\d)
\W Sözcük karakteri değil

ASCII karakter sınıfları

Bu sınıflar UTS#18'de sağlanan tanımları temel alır:

Desen Açıklama
[[:alnum:]] Alfasayısal ([0-9A-Za-z])
[[:alpha:]] Alfabetik ([A-Za-z])
[[:ascii:]] ASCII ([\x00-\x7F])
[[:blank:]] Boş ([\t ])
[[:cntrl:]] Denetim ([\x00-\x1F\x7F])
[[:digit:]] Basamaklar ([0-9])
[[:graph:]] Grafik ([!-~])
[[:lower:]] Küçük harf ([a-z])
[[:print:]] Yazdırılabilir ([ -~])
[[:punct:]] Noktalama işaretleri ([!-/:-@\[-`{-~])
[[:space:]] Boşluk ([\t\n\v\f\r ])
[[:upper:]] Büyük harf ([A-Z])
[[:word:]] Sözcük karakterleri ([0-9A-Za-z_])
[[:xdigit:]] Onaltılık basamak ([0-9A-Fa-f])

Performans

Bu bölümde, regex ifadelerinin hızı ve kaynak kullanımı hakkında bazı yönergeler sağlanmaktadır.

Unicode bellek kullanımını ve arama hızını etkileyebilir

KQL regex, Unicode için birinci sınıf destek sağlar. Çoğu durumda, Unicode'un desteklenmek için gereken ek bellek göz ardı edilebilir ve genellikle arama hızını etkilemez.

Aşağıda, bellek kullanımını ve arama hızını etkileyebilecek Unicode karakter sınıflarının bazı örnekleri verilmiştir:

  • Bellek kullanımı: Unicode'un etkisi öncelikle Unicode karakter sınıflarının kullanımından kaynaktır. Unicode karakter sınıflarının boyutu büyük olma eğilimindedir. Örneğin, \w karakter sınıfı varsayılan olarak yaklaşık 140.000 farklı kod noktasıyla eşleşir. Bu ek bellek gerektirir ve regex derlemeyi yavaşlatabilir. Gereksinimleriniz ASCII tarafından karşılanabiliyorsa, Unicode sınıfları yerine ASCII sınıflarının kullanılması önerilir. yalnızca ASCII sürümü \w birden çok şekilde ifade edilebilir ve bunların tümü eşdeğerdir.

    [0-9A-Za-z_]
    (?-u:\w)
    [[:word:]]
    [\w&&\p{ascii}]
    
  • Arama hızı: Unicode, büyük Unicode karakter sınıfları kullanılırken bile oldukça iyi işlenme eğilimindedir. Ancak, daha hızlı iç regex altyapılarından bazıları Unicode kullanan sözcük sınırı onayını işleyemez. Bu nedenle Unicode kullanan sözcük sınırı onaylarına ihtiyacınız yoksa yerine kullanmayı (?-u:\b) \bdüşünebilirsiniz. , (?-u:\b) arama hızını geliştirebilen bir sözcük karakterinin yalnızca ASCII tanımını kullanır.

Değişmez değerler aramalara hız kazandırabilir

KQL regex, regex deseni içindeki değişmez değerleri tanıma özelliğine sahiptir ve bu da aramaları önemli ölçüde hızlandırabilir. Mümkünse, deseninize değişmez değerler dahil olmak arama performansını büyük ölçüde iyileştirebilir. Örneğin, regex \w+@\w+içinde ilk oluşumları @ eşleştirilir ve ardından başlangıç konumunu bulmak için için \w+ ters eşleşme gerçekleştirilir.