Go 正则表达式在线测试工具 ( RE2 )
正则表达式: e.g. (?P<key>\w+)=(?P<value>\w+) , \d{1,3}(\.\d{1,3}){3} , (?imsU)^hello.*world$
测试文本:
Go 标准库的的正则表达式基于 RE2 引擎实现, 提供安全高效的模式匹配能力,支持标准正则语法但不支持回溯,以保证性能稳定和可预测性。
单字符表达式类型示例
任意字符(可包含换行 s=true).
字符类[xyz]
非字符类[^xyz]
Perl 字符类\d
非 Perl 字符类\D
ASCII 字符类[[:alpha:]]
非 ASCII 字符类[[:^alpha:]]
Unicode 字符类(单字母)\pN
Unicode 字符类\p{Greek}
非 Unicode 字符类\PN
非 Unicode 字符类\P{Greek}
组合表达式含义
xyx 后接 y
x|yx 或 y(优先匹配 x)
分组表达式说明
(re)捕获分组
(?P<name>re)命名捕获分组
(?:re)非捕获分组
转义序列表达式说明
\n换行
\t制表符
\x7F十六进制字符
\Q...\E字面量文本
重复表达式含义
x*0 个或多个 x(贪婪)
x*?0 个或多个 x(非贪婪)
x+1 个或多个 x(贪婪)
x+?1 个或多个 x(非贪婪)
x?0 个或 1 个 x(优先 1)
x??0 个或 1 个 x(优先 0)
x{n,m}n 到 m 个 x(贪婪)
x{n,}至少 n 个 x
x{n}恰好 n 个 x

说明:计数形式 x{n,m} 等最大限制为 1000。

标志(Flags)说明
i忽略大小写(默认:false)。
(?i)hello 会匹配 "hello" 和 "Hello"。
m多行模式:^ 和 $ 除了匹配整个文本的开头和结尾外,还会匹配每一行的开头和结尾(默认:false)
(?m)^b.*,可以匹配 "apple\nbanana\ncherry" 中的 “banana” 。
s允许 . 匹配换行符 \n(默认:false)。
(?s)start(.*)end 会匹配 "start B \n new line \n end"
U非贪婪模式开关:交换 x* 和 x*?、x+ 和 x+? 的含义等(默认:false)
反转:x* 变成 非贪婪,x*? 变成 贪婪,x+ 变成 非贪婪,x+? 变成 贪婪。
text:="a123b456b” 使用对比:
  • (?U)a.*b FindString ===> “a123b”    // 非贪婪,尽可能少匹配,遇到第一个b就停止
  • a.*b FindString ===> “a123b456b”   // 贪婪,可能多匹配直到最后一个b
空匹配锚点表达式说明
^文本或行首
$文本或行尾
\A文本开头
\b单词边界(相当于一边是 \w(字母/数字/下划线)同时 另一边是 \W 或 开头/结尾)
\z文本结尾 (整个字符串的结尾,如 world\z可以匹配 "hello\nworld")
Perl 字符类含义(全部仅限 ASCII)
\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_]

注:不支持 \h (水平空白),\H (非水平空白),\v (垂直空白),\V (非垂直空白)。

作为字符类元素的命名字符类
[\d]数字(等价于 \d
[^\d]非数字(等价于 \D
[\D]非数字(等价于 \D
[^\D]非非数字(等价于 \d
[[:name:]]字符类内部的命名 ASCII 类(等价于 [:name:]
[^[:name:]]取反字符类内部的命名 ASCII 类(等价于 [:^name:]
[\p{Name}]字符类内部的命名 Unicode 属性(等价于 \p{Name}
[^\p{Name}]取反字符类内部的命名 Unicode 属性(等价于 \P{Name}
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!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]
[[:lower:]]小写字母(等价于 [a-z]
[[:print:]]可打印字符(等价于 [ -~][[:graph:]]
[[:punct:]]标点符号(等价于 [!-/:-@[-`{-~]
[[:space:]]空白字符(等价于 [\t\n\v\f\r ]
[[:upper:]]大写字母(等价于 [A-Z]
[[:word:]]单词字符(等价于 [0-9A-Za-z_]
[[:xdigit:]]十六进制数字(等价于 [0-9A-Fa-f]