RE2正则表达式语法完全指南
正则表达式是文本处理中不可或缺的强大工具,而RE2作为Google开发的正则表达式引擎,以其安全性和高性能著称。本文将全面解析RE2支持的正则表达式语法,帮助开发者掌握这一重要工具。
基础语法结构
单字符匹配
RE2提供了多种匹配单个字符的方式:
.匹配任意字符(默认不包括换行符,设置s标志后包括)[abc]匹配字符a、b或c[^abc]匹配除a、b、c外的任意字符\d匹配数字(等价于[0-9])\D匹配非数字字符
字符类扩展
RE2支持丰富的字符类表示法:
- Unicode字符类:
\p{Greek}匹配希腊字母,\P{Greek}匹配非希腊字母 - ASCII字符类:
[[:alpha:]]匹配字母,[[:^alpha:]]匹配非字母 - 简写形式:
\pN(单字母Unicode类别)
组合与重复
表达式组合
xy表示x后跟yx|y表示匹配x或y(优先匹配x)
重复匹配
RE2提供了完整的重复匹配语法:
x*匹配0次或多次x(贪婪模式)x+匹配1次或多次x(贪婪模式)x?匹配0次或1次x(贪婪模式)x{n,m}匹配n到m次xx{n}精确匹配n次x
非贪婪版本(在量词后加?):
x*?匹配0次或多次x(非贪婪)x+?匹配1次或多次x(非贪婪)
注意:RE2限制重复次数最大为1000次,但无限重复不受此限制。
分组与标志
分组语法
(re)编号捕获组(?P<name>re)命名捕获组(也可写作(?<name>re))(?:re)非捕获组(?flags:re)设置标志的非捕获组
模式标志
RE2支持以下标志(可通过(?flags)语法设置):
i不区分大小写m多行模式(影响^和$的行为)s使.匹配换行符U非贪婪模式(交换和?的行为)
标志语法示例:(?im-s)开启i和m,关闭s
边界匹配
RE2提供多种边界匹配方式:
^文本开始或行首(m标志下)$文本结束或行尾(m标志下)\A文本绝对开始\z文本绝对结束\bASCII单词边界\B非ASCII单词边界
转义序列
RE2支持的标准转义序列:
\n换行符\t制表符\x7F十六进制字符\x{10FFFF}Unicode字符\Q...\E字面量文本(忽略元字符)
特殊转义:
\C匹配单个字节(即使UTF-8模式)\123八进制字符
字符类详解
字符类元素
字符类[...]内可包含:
- 单个字符:
a - 范围:
a-z - 字符类:
\d、[:alpha:] - Unicode属性:
\p{Lu}(大写字母)
预定义字符类
Perl风格(仅ASCII):
\w单词字符([A-Za-z0-9_])\W非单词字符\s空白字符\S非空白字符
ASCII字符类:
[[:alnum:]]字母数字[[:xdigit:]]十六进制数字[[:space:]]空白字符
Unicode支持
RE2对Unicode有良好支持:
\p{Sc}匹配所有货币符号\p{Lu}匹配所有大写字母\p{Z}匹配所有分隔符
Unicode一般类别包括:
- L(字母)
- N(数字)
- P(标点)
- S(符号)
- Z(分隔符)
- C(其他)
注意事项
-
RE2不支持的特性:
- 反向引用(如
\1) - 回溯控制(如
(?>re)) - 条件表达式
- 递归模式
- 反向引用(如
-
性能考虑:
- RE2设计保证线性时间匹配
- 避免过于复杂的嵌套表达式
- 合理使用非捕获组
(?:)提升性能
-
安全特性:
- 防止正则表达式拒绝服务(ReDoS)攻击
- 限制重复次数(最多1000次)
实用技巧
-
邮箱匹配示例:
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b -
URL提取:
https?://[^\s/$.?#].[^\s]* -
日期匹配(YYYY-MM-DD):
\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])
掌握RE2的正则表达式语法,可以让你在保证性能和安全性的同时,高效处理各种文本匹配需求。建议从简单模式开始,逐步尝试更复杂的表达式,并充分利用RE2的Unicode支持处理多语言文本。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



