RE2 语法
本文概述了 Kusto 查询语言 (KQL) 支持的正则表达式语法,这是 RE2 库的语法。
有许多 KQL 运算符和函数通过正则表达式(如 matches regex
、parse
和 replace_regex()
)执行字符串匹配、选择和提取。
在 KQL 中,正则表达式必须编码为字符串文本并遵循字符串引用规则。 例如,RE2 正则表达式 \A
在 KQL 中表示为 "\\A"
。 额外的反斜杠指示另一个反斜杠是正则表达式 \A
的一部分。
语法概述
下表概述了 RE2 正则表达式语法,它用于在 Kusto 中编写正则表达式。
语法元素 |
说明 |
单个文本 |
单个字符与自身匹配,元字符 (* + ? ( ) |) 除外,元字符具有独特的含义,如以下各行所述。 |
元字符 |
若要按原义匹配元字符,请使用反斜杠将其转义。 例如,正则表达式 \+ 表示真正的加号 (+ ) 字符。 |
替换 |
使用 | 交替两个表达式,以创建与任一表达式匹配的新表达式。 例如,e1 | e2 会匹配 e1 或 e2 。 |
串联 |
连接两个表达式以创建与第一个表达式后接第二个表达式匹配的新表达式。 例如,e1e2 匹配 e1 后接 e2 。 |
重复 |
元字符 ? 、+ 和 * 是重复运算符。 例如,e1? 匹配零个或一个出现的 e1 ,e1+ 匹配一个或多个出现的 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 |
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 所有格匹配(不支持)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)。
若要使用标志,必须指定 kind
和 flags
参数,如下所示: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 |