网址映射的 RE2 规范

本页介绍了在网址映射中使用正则表达式时与使用 RE2 语法相关的要求和限制。

RE2 具有以下内置限制:

  • RE2 不支持任意前瞻或后瞻断言,也不支持反向引用。具体而言,不支持以下反向引用运算符:
    • (?=) - 正向预搜索
    • (?!) - 负向预搜索
    • (?<=) - 正向后视
    • (?<!) - 反向否定后视
    • \N - 反向引用,其中 N 是一个整数
  • RE2 不会将 \cx 识别为 Control-X 字符。
  • RE2 无法识别原子分组运算符 (?>...)++
  • RE2 不识别 \C\G\X
  • RE2 不识别条件子模式 (?(...)...)、注释 (?#...)、模式引用 (?R) (?1) (?P>foo) 或 C 回调 (?C...)

除了前面所述的 RE2 限制之外,我们还通过使用以下许可名单对正则表达式语法施加了进一步的限制:

空字符串和空字符串的类似项

运算符 说明
^ 位于文本或行的开头 (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{n}? 正好 n 次

子匹配项

运算符 说明
(re) 编号捕获组(子匹配项)
(?P<name>re) 命名和编号的捕获组(子匹配项)
(?<name>re) 命名和编号的捕获组(子匹配项)
(?:re) 非捕获组
(?flags) 在当前组内设置标志;非捕获
(?flags:re) 在 re 期间设置标志;非捕获

范围

运算符 说明
[] 范围
\d 数字(≡ [0-9])
\D 非数字(≡ [^0-9])
\s 空白字符(≡ [\t\n\f\r ])
\S 非空白字符(≡ [^\t\n\f\r ])
\w 字词字符(≡ [0-9A-Za-z_])
\W 非字词字符(≡ [^0-9A-Za-z_])
[[:alnum:]] 字母数字 (≡ [0-9A-Za-z])
[[:alpha:]] 字母(≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] 空白 (≡ [\t ])
[[:cntrl:]] 控制字符 (≡ [\x00-\x1F\x7F])
[[:digit:]] 数字(≡ [0-9])
[[:lower:]] 小写(≡ [a-z])
[[:space:]] 空白字符(≡ [\t\n\v\f\r ])
[[:upper:]] 大写(≡ [A-Z])
[[:word:]] 字词字符(≡ [0-9A-Za-z_])
[[:xdigit:]] 十六进制数字(≡ [0-9A-Fa-f])

范围中允许使用的字符

字符范围 说明
0-9, A-Z, a-z 字母数字
\x00-\x7F ASCII
0-9A-Fa-f 十六进制数字
\t\n\v\f\r 空格符
^ 范围否定
!"#$%&'()*+,\-.:;<=>?@[\\\]^_`{|}~ 其他字符