正则表达式 2 (re2.h) 语法
正则表达式是描述字符串集的表示法。 当字符串位于正则表达式描述的集中时,我们说正则表达式 与字符串匹配 。
最简单的正则表达式是单个文本字符。 除了 *+?()|
等元字符,字符匹配自身。 若要匹配元字符,请使用反斜杠对其进行转义。 例如, \+
匹配文本加字符。
可以更改或串联两个正则表达式以形成新的正则表达式:如果 e1 匹配 s,e2 匹配 t,则 e1 | e2 匹配 s 或 t,e1e2 匹配 st。
元字符 *
、 +
和 ?
是重复运算符: e1*
与零个或多个 (可能不同的) 字符串的序列匹配,每个字符串都匹配 e1; e1+
匹配一个或多个; e1?
匹配零或 1。
运算符优先级(从最弱绑定到最强绑定)如下所示:
- 交替
- 串联
- repetition 运算符
显式括号可用于强制使用不同的含义,如在算术表达式中一样。 一些示例: ab|cd
等效于 (ab)|(cd)
; ab\
等效于 a(b\)
。
目前所介绍的语法大部分为传统的 Unix egrep 正则表达式语法。 此子集足以描述所有常规语言。 常规语言是一组字符串,只需使用固定内存量即可在单次传递文本中匹配这些字符串。 较新的正则表达式设施 (特别是 Perl,并且那些) 复制它的语言添加了许多新的运算符和转义序列。 这些更改使正则表达式更加简洁,有时更神秘,但并不强大。
本页列出了 RE2 接受的正则表达式语法。
它还列出了 PCRE、PERL 和 VIM 接受的一些语法。
单字符表达式的类型 | 示例 |
---|---|
任何字符,可能包括换行符(s = true) | . |
字符组 | [xyz] |
排除型字符组 | [^xyz] |
Perl 字符组(链接) | \d |
排除型 Perl 字符组 | \D |
ASCII 字符组(链接) | [[:alpha:]] |
排除型 ASCII 字符组 | [[:^alpha:]] |
Unicode 字符组(单字母名称) | \pN |
Unicode 字符组 | \p{Greek} |
排除型 Unicode 字符组(单字母名称) | \PN |
排除型 Unicode 字符组 | \P{Greek} |
复合匹配 | |
---|---|
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 |
实现限制:创建最小或最大重复计数超过 1000 的计数 x{n,m}
形式 、 x{n,}
和 x{n}
拒绝窗体。 无限制的重复不受此限制约束。
所有格重复 | |
---|---|
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) | 非捕获组 |
(?flags) | 在当前组中设置标志;非捕获 |
(?flags:re) | 在表达式中设置标志;非捕获 |
(?#text) | 注释(不支持) |
(?|x|y|z) | 分支编号重置(不支持) |
(?>re) | 表达式所有格匹配 (不支持) |
re@> | 表达式所有格匹配(不支持)VIM |
%(re) | 非捕获组(不支持) VIM |
Flags | |
---|---|
i | 不区分大小写(默认为 false) |
m | 多行模式: ^ 和 $ 匹配行首/尾,以及文本开头/结尾(默认为 false) |
s | let . 匹配 \n (默认为 false) |
U | ungreedy:x* 和 x*?、x+ 和 x+?等的交换含义 (默认 false) |
标志语法 xyz
(设置) 或 -xyz
(清除) 或 xy-z
(设置 xy
,清除 z
) 。
空字符串 | |
---|---|
^ | 文本开始或行首(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& | 前向肯定界定符(不支持)VIM |
re@= | 前向肯定界定符(不支持)VIM |
re@! | 前向否定界定符(不支持)VIM |
<re@= | 后向肯定界定符(不支持)VIM |
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) |
* | literal *,对于任何标点字符 * |
\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}) |
Unicode 字符组名称 - 常规类别 | |
---|---|
C | 其他 |
抄送 | control |
Cf | format |
Cn | 未赋值(不支持) |
Co | 私用 |
Cs | 代理项 |
L | 字母 |
LC | 大小写字母(不支持) |
L& | 大小写字母(不支持) |
Ll | 小写字母 |
Lm | 修饰字母 |
Lo | 其他字母 |
Lt | 首字母大写 |
Lu | 大写字母 |
M | 标记 |
Mc | 间距标记 |
Me | 封闭标记 |
Mn | 非间距标记 |
N | 数字 |
Nd | 十进制数字 |
Nl | 字母或数字 |
否 | 其他数字 |
P | 标点符号 |
Pc | 连接符 |
Pd | 短划线 |
Pe | 结束标点 |
Pf | 后引号 |
Pi | 前引号 |
Po | 其他标点符号 |
Ps | 开始标点 |
S | symbol |
Sc | 货币符号 |
Sk | 修饰符符号 |
Sm | 数学符号 |
So | 其他符号 |
Z | 分隔符 |
Zl | 行分隔符 |
Zp | 段落分隔符 |
Zs | 空白分隔符 |
Unicode 字符组名称 - 文字系统 |
---|
阿德拉姆 |
阿霍姆语 |
Anatolian_Hieroglyphs |
阿拉伯语 |
亚美尼亚语 |
阿维斯陀语 |
巴厘文 |
巴姆穆文 |
Bassa_Vah |
巴塔克文 |
孟加拉语 |
拜克舒克文 |
汉语拼音字母 |
婆罗米文 |
布莱叶盲文 |
布吉文 |
布锡语 |
Canadian_Aboriginal |
卡里亚文 |
Caucasian_Albanian |
占文 |
Cham |
切罗基语 |
花剌子模语 |
通用 |
科普特语 |
楔形文字 |
塞浦路斯语 |
西里尔字母 |
德塞莱特文 |
梵文 |
Dives_Akuru |
多格兰语 |
杜普洛伊速记体 |
Egyptian_Hieroglyphs |
爱尔巴桑语 |
埃利迈语 |
埃塞俄比亚文 |
格鲁吉亚语 |
格拉哥里语 |
哥特语 |
格兰塔字母 |
希腊语 |
古吉拉特语 |
Gunjala_Gondi |
锡克教文 |
汉语 |
韩语 |
Hanifi_Rohingya |
汉奴劳族文 |
哈特兰文 |
希伯来语 |
日文 |
Imperial_Aramaic |
继承 |
Inscriptional_Pahlavi |
Inscriptional_Parthian |
爪哇文 |
凯提文 |
埃纳德语 |
片假名 |
Kayah_Li |
卡罗须提文 |
Khitan_Small_Script |
高棉语 |
克吉奇文 |
信德文 |
老挝语 |
拉丁语 |
雷布查文 |
林布文 |
Linear_A |
Linear_B |
僳文傈 |
利西亚文 |
吕底亚文 |
马哈詹语 |
望加锡语 |
马拉雅拉姆语 |
阿拉米文 |
摩尼文 |
Marchen |
Masaram_Gondi |
梅德法伊德林文 |
Meetei_Mayek |
Mende_Kikakui |
Meroitic_Cursive |
Meroitic_Hieroglyphs |
苗文 |
莫迪文 |
蒙古语 |
毛里塔尼亚乌吉亚 |
穆尔塔尼 |
缅甸 |
纳巴泰 |
楠迪梵文 |
New_Tai_Lue |
印度比哈尔邦 |
Nko |
女书 |
Nyiakeng_Puachue_Hmong |
欧甘字母 |
Ol_Chiki |
Old_Hungarian |
Old_Italic |
Old_North_Arabian |
Old_Permic |
Old_Persian |
Old_Sogdian |
Old_South_Arabian |
Old_Turkic |
奥里雅语 |
欧塞奇语 |
奥斯曼亚字母 |
Pahawh_Hmong |
帕米拉语 |
Pau_Cin_Hau |
Phags_Pa |
腓尼基语 |
Psalter_Pahlavi |
勒姜语 |
古北欧文字 |
撒马利亚文 |
索拉什特拉文 |
夏拉达文 |
萧伯纳文 |
悉昙文字 |
手语书写体 |
僧伽罗语 |
粟特语 |
Sora_Sompeng |
索永布语 |
巽他语 |
Syloti_Nagri |
叙利亚语 |
他加禄语 |
塔班瓦语 |
Tai_Le |
Tai_Tham |
Tai_Viet |
泰克里文 |
泰米尔语 |
西夏语 |
泰卢固语 |
它拿字母 |
泰语 |
藏语 |
提夫纳语 |
底罗仆多文 |
乌加里特语 |
瓦依语 |
万秋文 |
Warang_Citi |
雅兹迪语 |
彝语 |
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(不支持)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))(不支持) |
(?&名称) | 递归调用已命名组(不支持) |
(?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 |
备注
本页面的某些部分是根据 Chromium.org 创建和共享的作品所做的修改,并根据 Creative Commons Attribution 4.0 国际许可证中所述的条款进行使用。 可在此处找到原始页面。
本作品根据 Creative Commons Attribution 4.0 International License 获得许可。