正则表达式 2 (re2.h) 语法

正则表达式是描述字符串集的表示法。 当字符串位于正则表达式描述的集中时,我们说正则表达式 与字符串匹配

最简单的正则表达式是单个文本字符。 除了 *+?()| 等元字符,字符匹配自身。 若要匹配元字符,请使用反斜杠对其进行转义。 例如, \+ 匹配文本加字符。

可以更改或串联两个正则表达式以形成新的正则表达式:如果 e1 匹配 s,e2 匹配 t,则 e1 | e2 匹配 st,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})
Perl 字符组(仅限所有 ASCII 码)
\d 匹配数字字符(等价于 [0-9])
\D 匹配非数字字符(等价于 [^0-9])
\s 匹配任何空白字符(等价于 [\t\n\f\r])
\S 匹配任何非空白字符(等价于 [^\t\n\f\r])
\w word 字符 (≡ [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!&quot;#$%&amp;&#39;()\*+,\-./:;&lt;=&gt;?@[\\\]^_` {\|}~]
[[:lower:]] 匹配小写字符(等价于 [a-z])
[[:print:]] 匹配可打印字符(等价于 [-~] 等价于 [[:graph:]])
[[:punct:]] 匹配标点字符(等价于 [!-/:-@[-`{-~])
[[:space:]] 匹配任何空白字符(等价于 [\t\n\v\f\r])
[[:upper:]] 匹配大写字符(等价于 [A-Z] )
[[:word:]] word 字符 (≡ [0-9A-Za-z_])
[[:xdigit:]] 匹配十六进制数字字符(等价于 [0-9A-Fa-f])
  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 许可证
本作品根据 Creative Commons Attribution 4.0 International License 获得许可。

另请参阅