Go语言支持的正则语法

1 字符

语法 说明
. 任意字符,在单行模式(s标志)下,也可以匹配换行
[xyz] 字符类
[^xyz] 否定字符类
\d Perl 字符类
\D 否定 Perl 字符类
[[:alpha:]] ASCII 字符类
[[:^alpha:]] 否定 ASCII 字符类
\pN Unicode 字符类 (one-letter name)
\p{Greek} Unicode 字符类
\PN 否定 Unicode 字符类 (one-letter name)
\P{Greek} 否定 Unicode 字符类

参考以下附录,获取具体字符类的内容:

2 组合

语法 说明
xy xy(x 后跟随 y)
x|y x 或 y (优先匹配 x)

3 重复次数

语法 说明
x* 零个或多个 x,贪婪
x+ 一个或多个 x,贪婪
x? 零个或一个 x,贪婪
x{n,m} n 到 m 个 x,贪婪
x{n,} n 个或多个 x,贪婪
x{n} n 个 x
x*? 零个或多个 x,非贪婪
x+? 一个或多个 x,非贪婪
x?? 零个或一个 x,非贪婪
x{n,m}? n 到 m 个 x,非贪婪
x{n,}? n 个或多个 x,非贪婪
x{n}? n 个 x

4 分组子模式

语法 说明
(re) 编号捕获组(子匹配)
(?P<name>re) 命名编号捕获组(子匹配)
(?:re) 非捕获组(子匹配)
(?flags) 设置标记对组后表达式生效,非捕获
(?flags:re) 组内设置标记,非捕获

标志语法是:

语法 说明
xyz 设置
-xyz 清除
xy-z 设置 xy,清除 z

支持的标志:

语法 说明
i 大小写不敏感,(默认 false)
m 多行模式: ^ 和 $ 匹配行开始和结束而不是匹配文本的开头和结尾(默认 false)
s 令 . 匹配 \n (默认 false)
U 非贪婪:交换 x* 和 x*? 的意义,x+ 和 x+?,等 (默认 false)

5 位置(零宽字符)

语法 说明
^ 设置标记 m 则匹配行首,否则匹配整个文本的开头(m 默认为 false)
$ 设置标记 m 则匹配行尾,否则匹配整个文本的结尾(m 默认为 false)
\A 整个文本的开头,忽略 m 标记
\b 单词边界
\B 非单词边界
\z 整个文本的结尾,忽略 m 标记

6 转义字符类

语法 说明
\a 响铃符 (相当于 \x07)
\f 换页符 (相当于 \x0C)
\t 横向制表符(相当于 \x09)
\n 换行符 (相当于 \x0A)
\r 回车符 (相当于 \x0D)
\v 纵向制表符(相当于 \x0B)
\123 8 進制编码所代表的字符(必须是 3 位数字)
\x7F 16 進制编码所代表的字符(必须是 3 位数字)
\x{10FFFF} 16 進制编码所代表的字符(最大值 10FFFF )
\Q…\E \Q 和 \E 之间的文本,忽略文本中的正则语法
\\ \
\^ ^
\$ $
\. .
\* *
\+ +
\? ?
\{ {
\} }
\( (
\) )
\[ [
\] ]
\| |

7 命名字符类 作为 字符类 的元素

语法 说明
[\d] 数字 (相当于 \d)
[^\d] 非数字 (相当于 \D)
[\D] 非数字 (相当于 \D)
[^\D] 数字 (相当于 \d)
[[:name:]] 命名的“ASCII 类”包含在“字符类”中 (相当于 [:name:])
[^[:name:]] 命名的“ASCII 类”不包含在“字符类”中 (相当于 [:^name:])
[\p{Name}] 命名的“Unicode 类”包含在“字符类”中 (相当于 \p{Name})
[^\p{Name}] 命名的“Unicode 类”不包含在“字符类”中 (相当于 \P{Name})

完!
原文出自:小韩说课
微信关注:小韩说课
Go语言支持的正则语法