RE2 語法
本文提供 Kusto 查詢語言 (KQL) 所支援的正則表達式語法概觀,這是 RE2 連結庫的語法。
有許多 KQL 運算符和函式會使用正規表示式來執行字串比對、選取和擷取,例如 matches regex
、 parse
和 replace_regex()
。
在 KQL 中,正則表達式必須編碼為 字串常值 ,並遵循字串引號規則。 例如,RE2 正規表示式 \A
以 KQL 表示為 "\\A"
。 額外的反斜杠表示另一個反斜杠是正則表達式 \A
的一部分。
語法概觀
下表概觀 RE2 正則表達式語法,用來在 Kusto 中撰寫正則表達式。
Syntax 元素 |
描述 |
單一常值 |
單一字元會比對本身,但中繼字元除外(* + ? ( ) |),其具有獨特的意義,如下列數據列所述。 |
Metacharacters |
若要以字面比對中繼字元,請使用反斜杠將其逸出。 例如,正則表示式 \+ 符合常值加 (+ ) 字元。 |
替代 |
使用 | 替代兩個運算式,以建立符合任一表達式的新表達式。 例如, e1 | e2 符合 e1 或 e2 。 |
串連 |
串連兩個表達式,以建立符合第一個表達式的新表達式,後面接著第二個表達式。 例如, e1e2 相符項目 e1 後面接著 e2 。 |
重複 |
Metacharacters ? 、 + 和 * 是重複運算子。 例如, e1? 比對零或一個出現的 e1 , e1+ 符合一或多個出現的 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 |
x 或 y (偏好 x ) |
重複
範例 |
描述 |
x* |
零個或多個 x ,偏好更多 |
x+ |
一或多個 x ,偏好更多 |
x? |
零或一個 x ,偏好一個 |
x{n,m} |
n 或 n +1 或 ...或 m x ,偏好更多 |
x{n,} |
n 或更多 x ,偏好更多 |
x{n} |
完全 n x |
x*? |
零或更多 x ,偏好較少 |
x+? |
一或多個 x ,偏好較少 |
x?? |
零或一個 x ,偏好零 |
x{n,m}? |
n 或 n +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}+ |
完全n x , 擁有性 (不支援) |
分組
範例 |
描述 |
(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 |