正则表达式是描述字符串集的表示法。 当字符串位于正则表达式描述的集中时,我们说正则表达式 与字符串匹配 。
最简单的正则表达式是单个文本字符。 除了 *+?()| 等元字符,字符匹配自身。 若要匹配元字符,请使用反斜杠对其进行转义。 例如, \+ 匹配文本加字符。
可以更改或串联两个正则表达式以形成新的正则表达式:如果 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 获得许可。