如需配置使用正则表达式的流量路由规则,您必须了解 RE2 正则表达式语法的要求和限制。
RE2 具有以下内置限制:
- RE2 不支持任意前瞻或后瞻断言,也不支持反向引用。具体而言,不支持以下反向引用运算符:
(?=)- 正向预搜索(?!)- 负向预搜索(?<=)- 正向后视(?<!)- 负向后视\N- 后向引用,其中 N 是一个整数
- RE2 不会将
\cx识别为 Control-X 字符。 - RE2 不识别原子分组运算符
(?>...)和++ - RE2 不识别
\C、\G或\X。 - RE2 不识别条件子模式
(?(...)...)、注释(?#...)、模式引用(?R) (?1) (?P>foo)或 C 回调(?C...)。
除了前面所述的 RE2 限制之外,我们还通过使用以下许可名单对正则表达式语法施加了进一步的限制:
- 允许使用单字符运算符
- 群组只能包含 submatch 运算符
- 不允许重复使用群组
- 字符重复仅允许在单个正则表达式中与以下内容一起使用:
- 范围只能包含以下内容:
- 字符范围
- 位数范围
- 允许用于范围的字符中列出的符号
空字符串和空字符串的类似项
| 运算符 | 说明 |
|---|---|
^ |
位于文本或行的开头 (m=true) |
$ |
在文本末尾(如 \z 而不是 \Z)或行末尾(m=true) |
\A |
在文字开头 |
\b |
位于 ASCII 字词边界(一侧为 \w,另一侧为 \W、\A 或 \z) |
\B |
不在 ASCII 字词边界 |
\g |
在被搜索的子文本的开头 |
\G |
在上一场比赛结束时 |
\z |
在文字末尾 |
重复次数
| 运算符 | 说明 |
|---|---|
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,首选零个 |
x{n,m}? |
N 或 n+1 或 ... 或 m 次,首选次数较少的 |
x{n,}? |
N 或更多 x,首选较少 |
x{n}? |
正好 n 次 |
子匹配项
| 运算符 | 说明 |
|---|---|
(re) |
编号捕获组(子匹配项) |
(?P<name>re) |
已命名和已编号的捕获组(子匹配项) |