RE2 語法

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

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

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

語法概觀

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

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

注意

正則表達式運算符會依此順序進行評估:交替 () | 、串連 (並排運算式) ,以及重複 (?+*) 。 使用括號來控制評估順序。

單一字元運算式

範例 描述
. 任何字元,可能包含新行字元 (s = true)
[xyz] 字元類別
[^xyz] 否定字元類別
\d Perl 字元類別
\D 否定 Perl 字元類別
[[:alpha:]] ASCII 字元類別
[[:^alpha:]] 否定 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 或 ... 或 mx,偏好更多
x{n,} n 或更多 x,偏好更多
x{n} 完全符合 nx
x*? 零或更多 x,偏好更少
x+? 一或更多 x,偏好更少
x?? 零或一 x,偏好零
x{n,m}? nn+1 或 ... 或 mx,偏好更少
x{n,}? n 或更多 x,偏好更少
x{n}? 完全符合 nx
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 或 ... 或 mx,所有格 (不支援)
x{n,}+ n 或更多 x,所有格 (不支援)
x{n}+ 完全符合 nx,所有格 (不支援)

群組

範例 描述
(re) 已編號擷取群組 (子相符)
(?P<name>re) 具名 & 編號的擷取群組 (子配對)
(?<name>re) 具名 & 編號的擷取群組 (子配對) (不支援)
(?'name're) 具名 & 編號的擷取群組 (子配對) (不支援)
(?:re) 非擷取群組
(?flags) 設定目前群組內的旗標;非擷取
(?flags:re) 在重新期間設定旗標;非擷取
(?#text) 註解 (不支援)
(?\|x\|y\|z) 分支編號重設 (不支援)
(?>re) re 的所有格相符 (不支援)
re@> re 的所有格相符 (不支援) VIM
%(re) 不支援非擷取群組 () VIM

Flags

範例 描述
i 不區分大小寫 (預設為 false)
m 多行模式:除了開始/結束文字之外,^$ 也會比對開始/結束行 (預設為 false)
s . 比對 \n (預設為 false)
U 非窮盡:交換 x*x*?x+x+? 等的意義 (預設為 false)

旗標語法為 xyz (設定) 或 -xyz (清除) 或 xy-z (設定 xy、清除 z)。

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

空白字串

範例 描述
^ 在文字或行的開頭 (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 設定對比開始 (= \K) (不支援) 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 新行 (≡ \012)
\r 歸位字元 (≡ \015)
\v 垂直定位字元 (≡ \013)
\* 常值 *,適用於任何標點符號字元 *
\123 八進位字元碼 (最多三位數)
\x7F 十六進位字元碼 (剛好兩位數)
\x{10FFFF} 十六進位字元碼
\C 即使在 UTF-8 模式中,也符合單一位元組
\Q...\E 常值文字 ... (即使 ... 有標點符號)
\1 反向參考 (不支援)
\b 退格鍵 (不支援) (使用 \010)
\cK 控制 Char ^K (不支援) (使用 \001 等)
\e Escape 鍵 (不支援) (使用 \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] 數字 (≡ \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 數字 (≡ [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:]] 空白 (≡ [\t ])
[[:cntrl:]] 控制項 (≡ [\x00-\x1F\x7F])
[[:digit:]] 數字 (≡ [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 控制
Cf format
Cn 未指派的程式碼項目 (不支援)
Co 私用
Cs 代理
L 字母
LC 大小寫字母 (不支援)
L& 大小寫字母 (不支援)
Ll 小寫字母
Lm 修飾字母
Lo 其他字母
Lt 字首大寫字母
Lu 大寫字母
M mark
Mc 間距標記
Me 封閉標記
Mn 非步調標記
N 數字
Nd 十進位數字
Nl 字母數字
No 其他數字
P 標點符號
Pc 連接標點符號
Pd 破折號
Pe 右標點符號
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 ) VIM 不支援的非空格字元 (≡ [^ \t]) (
\d 數字 (≡ [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 忽略大小寫 (不支援) VIM
\C 符合大小寫 (不支援) VIM
\m magic (不支援) VIM
\M nomagic (不支援) VIM
\v verymagic (不支援) VIM
\V verynomagic (不支援) 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 更像初構 (不支援)
(*COMMIT) (不支援)
(*F) (不支援)
(*FAIL) (不支援)
(*MARK) (不支援)
(*PRUNE) (不支援)
(*SKIP) (不支援)
(*THEN) (不支援)
(*ANY) 設定新行慣例 (不支援)
(*ANYCRLF) (不支援)
(*CR) (不支援)
(*CRLF) (不支援)
(*LF) (不支援)
(*BSR_ANYCRLF) 設定 \R 慣例 (不支援) PCRE
(*BSR_UNICODE) (不支援) PCRE