Regex söz dizimi
Şunlar için geçerlidir: ✅Microsoft Fabric✅Azure Veri Gezgini✅ Azure İzleyici✅Microsoft Sentinel
Bu makalede, Kusto Sorgu Dili (KQL) tarafından desteklenen normal ifade söz dizimine genel bir bakış sağlanır.
, ve gibi matches regex
parse
normal 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 \A
bir 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:
- Aralık:
[a-cd]
==[[a-c]d]
- Sendika:
[ab&&bc]
==[[ab]&&[bc]]
- 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}]
. - 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 , \A veya \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_Number
karşılık gelir.
Bayraklar tek karakterdir. Örneğin, (?x)
bayrağını x
ayarlar ve (?-x)
bayrağını x
temizler. 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
veyaA
ile 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)
\b
düşü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.