RE2 语法

本文概述了 Kusto 查询语言 (KQL) 支持的正则表达式语法,这是 RE2 库的语法。

有许多 KQL 运算符和函数通过正则表达式(如 matches regexparsereplace_regex())执行字符串匹配、选择和提取。

在 KQL 中,正则表达式必须编码为字符串文本并遵循字符串引用规则。 例如,RE2 正则表达式 \A 在 KQL 中表示为 "\\A"。 额外的反斜杠指示另一个反斜杠是正则表达式 \A 的一部分。

语法概述

下表概述了 RE2 正则表达式语法,它用于在 Kusto 中编写正则表达式。

语法元素 说明
单个文本 单个字符与自身匹配,元字符 (* + ? ( ) |) 除外,元字符具有独特的含义,如以下各行所述。
元字符 若要按原义匹配元字符,请使用反斜杠将其转义。 例如,正则表达式 \+ 表示真正的加号 (+) 字符。
替换 使用 | 交替两个表达式,以创建与任一表达式匹配的新表达式。 例如,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,} 匹配至少 nx,首选多匹配
x{n} 匹配恰好 nx
x*? 匹配零个或任意个 x,首选少匹配
x+? 匹配至少一个 x,首选少匹配
x?? 匹配零个或一个 x,首选零个
x{n,m}? 匹配 nn+1...至多 mx,首选少匹配
x{n,}? 匹配至少 nx,首选少匹配
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,}+ 匹配至少 nx,所有格(不支持)
x{n}+ 匹配恰好 nx,所有格(不支持)

分组

示例 说明
(re) 编号捕获组(子匹配)
(?P<name>re) 命名和编号捕获组(子匹配)
(?<name>re) 命名和编号捕获组(子匹配)(不支持)
(?'name're) 命名和编号捕获组(子匹配)(不支持)
(?:re) 非捕获组
(?flags) 在当前组中设置标志;非捕获
(?flags:re) 在 re 中设置标志;非捕获
(?#text) 注释(不支持)
(?\|x\|y\|z) 分支编号重置(不支持)
(?>re) re 所有格匹配(不支持)VIM
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 匹配控制字符 ^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] 匹配数字字符 (≡ \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 number
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 匹配非空白字符 (≡ [^ \t])(不支持)VIM
\d 匹配数字字符 (≡ [0-9]) VIM
\D \d VIM
\x 匹配十六进制数字字符 (≡ [0-9A-Fa-f])(不支持)VIM
\X \x
\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 更类似于 Prolog(不支持)
(*COMMIT) (不支持)
(*F) (不支持)
(*FAIL) (不支持)
(*MARK) (不支持)
(*PRUNE) (不支持)
(*SKIP) (不支持)
(*THEN) (不支持)
(*ANY) 设置换行约定(不支持)
(*ANYCRLF) (不支持)
(*CR) (不支持)
(*CRLF) (不支持)
(*LF) (不支持)
(*BSR_ANYCRLF) 设置 \R 约定(不支持)PCRE
(*BSR_UNICODE) (不支持)PCRE