共用方式為


RE2 語法

本文提供 Kusto 查詢語言 (KQL)支援的正則表達式語法概觀,這是 RE2 連結庫的語法。

有許多 KQL 運算符和函式會使用正規表示式來執行字串比對、選取和擷取,例如 matches regexparsereplace_regex()

在 KQL 中,正則表達式必須編碼為 字串常值 ,並遵循字串引號規則。 例如,RE2 正規表示式 \A 以 KQL 表示為 "\\A"。 額外的反斜杠表示另一個反斜杠是正則表達式 \A的一部分。

語法概觀

下表概觀 RE2 正則表達式語法,用來在 Kusto 中撰寫正則表達式。

Syntax 元素 描述
單一常值 單一字元會比對本身,但中繼字元除外(* + ? ( ) |),其具有獨特的意義,如下列數據列所述。
Metacharacters 若要以字面比對中繼字元,請使用反斜杠將其逸出。 例如,正則表示式 \+ 符合常值加 (+) 字元。
替代 使用 | 替代兩個運算式,以建立符合任一表達式的新表達式。 例如, e1 | e2 符合 e1e2
串連 串連兩個表達式,以建立符合第一個表達式的新表達式,後面接著第二個表達式。 例如, e1e2 相符項目 e1 後面接著 e2
重複 Metacharacters ?+* 是重複運算子。 例如, e1? 比對零或一個出現的 e1e1+ 符合一或多個出現的 e1,並 e1* 符合零或多個可能不同的字串序列, 符合 e1

注意

正規表示式運算子會依下列順序進行評估:交替 (|)、串連 (並存運算式),以及重複 (?+、 。 * 使用括號來控制評估順序。

單一字元表達式

範例 描述
. 任何字元,可能包括換行符(s=true)
[xyz] 字元類別
[^xyz] negated 字元類別
\d Perl 字元類別
\D negated Perl 字元類別
[[:alpha:]] ASCII 字元類別
[[:^alpha:]] negated ASCII 字元類別
\pN Unicode 字元類別 (一個字母名稱)
\p{Greek} Unicode 字元類別
\PN 否定的 Unicode 字元類別 (一個字母名稱)
\P{Greek} 負號 Unicode 字元類別

複合

範例 描述
xy x,接著執行 y
x\|y xy (偏好 x

重複

範例 描述
x* 零個或多個 x,偏好更多
x+ 一或多個 x,偏好更多
x? 零或一個 x,偏好一個
x{n,m} nn+1 或 ...或 m x,偏好更多
x{n,} n 或更多 x,偏好更多
x{n} 完全 n x
x*? 零或更多 x,偏好較少
x+? 一或多個 x,偏好較少
x?? 零或一個 x,偏好零
x{n,m}? nn+1 或 ...或 m x,偏好較少
x{n,}? n 或更多 x,偏好較少
x{n}? 完全 n x
x{} (≡ x*) (不支援) VIM
x{-} (≡ x*?) (不支援) VIM
x{-n} (≡ x{n}?) (不支援) VIM
x= (≡ x?) (不支援) VIM

實作限制:計算窗體 x{n,m}、x{n、}和 x{n} 會拒絕建立超過 1000 個最小或最大重複計數的窗體。 無限制的重複不受此限制。

擁有性重複

範例 描述
x*+ 零個或多個 x,擁有性 (不支援)
x++ 一或多個 x,擁有(不支援)
x?+ 零或一 x個,擁有性 (不支援)
x{n,m}+ n 或。。。或 m x、 擁有性 (不支援)
x{n,}+ n 或更多 x、 擁有性 (不支援)
x{n}+ 完全nx, 擁有性 (不支援)

分組

範例 描述
(re) 編號擷取群組 (子相符專案)
(?P<name>re) 具名和編號的擷取群組 (子組合)
(?<name>re) 命名與編號的擷取群組 (子匹配) (不支援)
(?'name're) 命名與編號的擷取群組 (子匹配) (不支援)
(?:re) 非擷取群組
(?flags) 設定目前群組內的旗標;非擷取
(?flags:re) 在 re 期間設定旗標;非擷取
(?#text) 註注 (不支援)
(?\|x\|y\|z) 分支編號重設 (不支援)
(?>re) 擁有比對 re (不支援)
re@> (不支援) VIM 的擁有性比 re
%(re) 非擷取群組 (不支援) VIM

旗標

範例 描述
i 不區分大小寫 (預設值 false)
m 多行模式: ^$ 比對開始/結束文字之外,還比對開始/結束文字 (預設值 false)
s let . match \n (預設值 false)
U ungreedy:和 x*?x+x+?等的x*交換意義 (預設值 false)

旗標語法為 xyz (set) 或 -xyz (clear) 或 xy-z (set xy, clear z)。

若要使用旗標,您必須指定 kind 和 參數,如下所示: kind= regex regexFlags flags=flags

空字串

範例 描述
^ 文字或行開頭 (m=true)
$ 文字結尾 (如 \z\Z) 或行 (m=true)
\A 文字開頭
\b 在 ASCII 字邊界 (\w 在一邊與 \W\A\z 另一邊 )
\B 不在 ASCII 字邊界
\g 在搜尋子文字 (不支援) PCRE 的開頭
\G 在最後一場比賽結束時 (不支援) PERL
\Z 文字結尾或文字結尾的新行之前 (不支援)
\z 文字結尾
(?=re) 文字比對 re 之前 (不支援)
(?!re) 文字不相符 re 之前 (不支援)
(?<=re) 文字比對 re 之後 (不支援)
(?<!re) 文字不相符 re 之後 (不支援)
re& 文字比對 re 之前 (不支援) VIM
re@= 文字比對 re 之前 (不支援) VIM
re@! 在文字不相符 re 之前 (不支援) VIM
re@<= 文字比對 re 之後 (不支援) VIM
re@<! 文字不相符 re 之後 (不支援) VIM
\zs set start of match (= \K) (NOT SUPPORTED) VIM
\ze 設定比對結尾 (不支援) VIM
\%^ 檔案開頭 (不支援) VIM
\%$ 檔尾(不支援) VIM
\%V 螢幕上 (不支援) VIM
\%# 游標位置 (不支援) VIM
\%'m 標記 m 位置 (不支援) VIM
\%23l 行 23 (不支援) VIM
\%23c 數據行 23 (不支援) VIM
\%23v 虛擬數據行 23 (不支援) VIM

逸出序列

範例 描述
\a 鐘(≡ \007
\f 表單摘要 (≡ \014
\t 水平索引標籤 (≡ \011
\n newline (≡ \012
\r 歸位字元 (≡ \015
\v 垂直製表元 (≡ \013
\* 常值 *,適用於任何標點符號字元 *
\123 八進位字元碼 (最多三位數)
\x7F 十六進位字元碼 (正好兩位數)
\x{10FFFF} 十六進位字元碼
\C 比對單一位元組,即使在UTF-8模式中
\Q...\E 常值文字 ... 即使 ... 具有標點符號
\1 反向參考 (不支援)
\b backspace (不支援) (使用 \010
\cK 控制字元 ^K (不支援) (使用 \001 等)
\e 逸出 (不支援) (使用 \033
\g1 反向參考 (不支援)
\g{1} 反向參考 (不支援)
\g{+1} 反向參考 (不支援)
\g{-1} 反向參考 (不支援)
\g{name} 具名反向參考 (不支援)
\g<name> 子程式呼叫 (不支援)
\g'name' 子程式呼叫 (不支援)
\k<name> 具名反向參考 (不支援)
\k'name' 具名反向參考 (不支援)
\lX 小寫 X (不支援)
\ux 大寫 x (不支援)
\L...\E 小寫文字 ... (不支援)
\K 重設開頭 $0 (不支援)
\N{name} 具名 Unicode 字元 (不支援)
\R 換行符 (不支援)
\U...\E 大寫文字 ... (不支援)
\X 擴充 Unicode 序列 (不支援)
\%d123 十進位字元 123 (不支援) VIM
\%xFF 十六進位字元 FF (不支援) VIM
\%o123 八進位字元 123 (不支援) VIM
\%u1234 Unicode 字元0x1234 (不支援) VIM
\%U12345678 Unicode 字元0x12345678 (不支援) VIM

字元類別專案

範例 描述
x 單一字元
A-Z 字元範圍 (含)
\d Perl 字元類別
[:foo:] ASCII 字元類別 foo
\p{Foo} Unicode 字元類別 Foo
\pF Unicode 字元類別 F (一個字母名稱)

具名字符類別做為字元類別專案

範例 描述
[\d] digits (≡ \d
[^\d] 非數位(≡ \D
[\D] 非數位(≡ \D
[^\D] 不是數字(≡ \d
[[:name:]] 字元類別內的具名 ASCII 類別 (≡ [:name:]
[^[:name:]] 具名 ASCII 類別在否定字元類別內 (≡ [:^name:]
[\p{Name}] 字元類別內的具名 Unicode 屬性 (≡ \p{Name}
[^\p{Name}] 已否定字元類別內的具名 Unicode 屬性 (≡ \P{Name}

Perl 字元類別

僅限 ASCII

範例 描述
\d digits (≡ [0-9]
\D 非數位(≡ [^0-9]
\s 空白 (≡ [\t\n\f\r ]
\S 非空白(≡ [^\t\n\f\r ]
\w 字字元 (≡ [0-9A-Za-z_]
\W 不是字元 (≡ [^0-9A-Za-z_]
\h 水平空間 (不支援)
\H 非水平空間(不支援)
\v 垂直空間 (不支援)
\V 非垂直空間(不支援)

ASCII 字元類別

範例 描述
[[:alnum:]] 英數位元 (≡ [0-9A-Za-z]
[[:alpha:]] 字母 (≡ [A-Za-z]
[[:ascii:]] ASCII (≡ [\x00-\x7F]
[[:blank:]] blank (≡ [\t ]
[[:cntrl:]] control (≡ [\x00-\x1F\x7F]
[[:digit:]] digits (≡ [0-9]
[[:graph:]] 圖形化 (≡ [!-~][A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_ { |}~]
[[:lower:]] 小寫 (≡ [a-z]
[[:print:]] 可列印的 (≡ [ -~][ [:graph:]]
[[:punct:]] 標點符號 (≡ [!-/:-@[- {-~]
[[:space:]] 空白 (≡ [\t\n\v\f\r ]
[[:upper:]] 大寫 (≡ [A-Z]
[[:word:]] 字字元 (≡ [0-9A-Za-z_]
[[:xdigit:]] 十六進位數位 (≡ [0-9A-Fa-f]

Unicode 字元類別名稱

一般

範例 描述
C 其他
Cc control
Cf format
Cn 未指定的代碼點 (不支援)
Co 私用
Cs 代理
L letter
LC 大小寫字母 (不支援)
L& 大小寫字母 (不支援)
Ll 小寫字母
Lm 修飾詞字母
Lo 其他字母
Lt titlecase letter
Lu 大寫字母
M 標記
Mc 間距標記
Me 封入標記
Mn 非步調標記
N 數值
Nd 十進位數字
Nl 字母編號
No 其他數位
P 標點符號
Pc 連接器標點符號
Pd 虛線標點符號
Pe close 標點符號
Pf 最終標點符號
Pi 初始標點符號
Po 其他標點符號
Ps 開啟標點符號
S 符號
Sc 貨幣符號
Sk 修飾詞符號
Sm 數學符號
So 其他符號
Z separator
Zl 行分隔符
Zp 段落分隔符
Zs 空格分隔符

指令碼

指令碼
Adlam
Ahom
Anatolian_Hieroglyphs
Arabic
Armenian
Avestan
Balinese
Bamum
Bassa_Vah
Batak
Bengali
Bhaiksuki
Bopomofo
Brahmi
Braille
Buginese
Buhid
Canadian_Aboriginal
Carian
Caucasian_Albanian
Chakma
Cham
Cherokee
Chorasmian
Common
Coptic
Cuneiform
Cypriot
Cyrillic
Deseret
Devanagari
Dives_Akuru
Dogra
Duployan
Egyptian_Hieroglyphs
Elbasan
Elymaic
Ethiopic
Georgian
Glagolitic
Gothic
Grantha
Greek
Gujarati
Gunjala_Gondi
Gurmukhi
Han
Hangul
Hanifi_Rohingya
Hanunoo
Hatran
Hebrew
Hiragana
Imperial_Aramaic
Inherited
Inscriptional_Pahlavi
Inscriptional_Parthian
Javanese
Kaithi
Kannada
Katakana
Kayah_Li
Kharoshthi
Khitan_Small_Script
Khmer
Khojki
Khudawadi
Lao
Latin
Lepcha
Limbu
Linear_A
Linear_B
Lisu
Lycian
Lydian
Mahajani
Makasar
Malayalam
Mandaic
Manichaean
Marchen
Masaram_Gondi
Medefaidrin
Meetei_Mayek
Mende_Kikakui
Meroitic_Cursive
Meroitic_Hieroglyphs
Miao
Modi
Mongolian
Mro
Multani
Myanmar
Nabataean
Nandinagari
New_Tai_Lue
Newa
Nko
Nushu
Nyiakeng_Puachue_Hmong
Ogham
Ol_Chiki
Old_Hungarian
Old_Italic
Old_North_Arabian
Old_Permic
Old_Persian
Old_Sogdian
Old_South_Arabian
Old_Turkic
Odia
Osage
Osmanya
Pahawh_Hmong
Palmyrene
Pau_Cin_Hau
Phags_Pa
Phoenician
Psalter_Pahlavi
Rejang
Runic
Samaritan
Saurashtra
Sharada
Shavian
Siddham
SignWriting
Sinhala
Sogdian
Sora_Sompeng
Soyombo
Sundanese
Syloti_Nagri
Syriac
Tagalog
Tagbanwa
Tai_Le
Tai_Tham
Tai_Viet
Takri
Tamil
Tangut
Telugu
Thaana
Thai
Tibetan
Tifinagh
Tirhuta
Ugaritic
Vai
Wancho
Warang_Citi
Yezidi
Yi
Zanabazar_Square

Vim 字元類別

範例 描述
\i 標識元字元 (不支援) VIM
\I \i 除了數位 (不支援) VIM
\k 關鍵詞字元 (不支援) VIM
\K \k 除了數位 (不支援) VIM
\f 檔名字符 (不支援) VIM
\F \f 除了數位 (不支援) VIM
\p 可列印字元 (不支援) VIM
\P \p 除了數位 (不支援) VIM
\s 空格元 (≡ [ \t]) (不支援) VIM
\S 非白空格字元 (≡ [^ \t]) (不支援) VIM
\d digits (≡ [0-9]) VIM
\D \d VIM
\x 十六進位數位 (≡ [0-9A-Fa-f]) (不支援) VIM
\X 不支援 (不支援 \x ) VIM
\o 八進位數位 (≡ [0-7]) (不支援) VIM
\O 不支援 (不支援 \o ) VIM
\w 文字字元 VIM
\W \w VIM
\h 字頭字元 (不支援) VIM
\H 不支援 (不支援 \h ) VIM
\a 字母 (不支援) VIM
\A 不支援 (不支援 \a ) VIM
\l 小寫 (不支援) VIM
\L 不小寫 (不支援) VIM
\u 大寫 (不支援) VIM
\U 非大寫 (不支援) VIM
\_x \x 加上換行符,適用於任何 x (不支援) VIM
\c ignore case (不支援) VIM
\C 比對案例 (不支援) VIM
\m 魔術 (不支援) VIM
\M nomagic (不支援) VIM
\v 非常魔法 (不支援) VIM
\V 非常野性 (不支援) VIM
\Z 忽略 Unicode 組合字元 (不支援) VIM 的差異

Magic

範例 描述
(?{code}) 任意 Perl 程式代碼 (不支援) PERL
(??{code}) 延後任意 Perl 程式代碼 (不支援) PERL
(?n) 遞歸呼叫 regexp 擷取群組 n (不支援)
(?+n) 遞迴對相對群組 +n 的呼叫 (不支援)
(?-n) 遞迴對相對群組 -n 的呼叫 (不支援)
(?C) PCRE 圖說文字 (不支援) PCRE
(?R) 對整個 regexp 的遞歸呼叫 (≡ (?0)) (不支援)
(?&name) 遞迴對具名群組的呼叫 (不支援)
(?P=name) 具名反向參考 (不支援)
(?P>name) 遞迴對具名群組的呼叫 (不支援)
(?(cond)true\|false) 條件式分支 (不支援)
(?(cond)true) 條件式分支 (不支援)
(*ACCEPT) 讓 regexps 更像 Prolog (不支援)
(*COMMIT) (不支援)
(*F) (不支援)
(*FAIL) (不支援)
(*MARK) (不支援)
(*PRUNE) (不支援)
(*SKIP) (不支援)
(*THEN) (不支援)
(*ANY) 設定換行符慣例 (不支援)
(*ANYCRLF) (不支援)
(*CR) (不支援)
(*CRLF) (不支援)
(*LF) (不支援)
(*BSR_ANYCRLF) set \R 慣例 (不支援) PCRE
(*BSR_UNICODE) (不支援)PCRE