go标准库-Regexp
Contents
go语言中文网有很多文档缺少内容比如string.Builder就没有,godoc绝对详尽,推荐阅读godoc
Syntax
单字符
- .:匹配任意字符
- [xyz] :匹配xyz
- [^xyz] :不匹配xyz
- \d:数字,[0-9]
- \D:非数字
- \s:空字符,[\t\n\f\r ]
- \S:非空字符
- \w:单词字符,[0-9A-Za-z_]
- \W:非单词字符
结合
- xy:匹配x后匹配y
- x|y:匹配x或者y
重复,匹配最多次
- x*:重复任意次
- x+:重复至少1次
- x{n,m}:重复[n,m]次,n或m可省略
- x{n}:重复n次
- x?:匹配1次或0次,x可以为上面的重复类型
捕获分组,匹配后可以访问
- (re):以索引访问的捕获分组
- (?P
<name>
re):以索引或命名访问的捕获分组 - (?:re):不捕获的分组
- (?flags):设置当前所在分组的标志,不捕获也不匹配,常用flag有
i
:大小写不敏感(默认关闭),标志语法为xy-z
(设置xy,清楚z)
边界匹配
- ^:匹配开始
- $:匹配结尾
重要提醒:
对于正则表达式尽量使用原生字符串即用反引号`
括起来的字符串,否则对于"
括起来的字符串会自动进行转义,所以`\.`
就得使用"\\."
来表示
函数
- func Match(pattern string, b []byte) (matched bool, err error)
- func MatchString(pattern string, s string) (matched bool, err error)
type Regexp struct
函数
- func Compile(expr string) (*Regexp, error):Compile解析并返回一个正则表达式。
方法
Find(All)?(String)?(Submatch)?(Index)?
如果’String’出现了,匹配对象为字符串,否则应该是[]byte类型,返回值和匹配对象的类型是对应的。
如果’Submatch’出现了,返回值是表示正则表达式中成功的组匹配(子匹配/次级匹配)的切片。
如果’Index’出现了,匹配/分组匹配会用输入流的字节索引对表示result[2n:2n+1]表示第n个分组匹配的的匹配结果。
- func (re *Regexp) FindSubmatch(b []byte) [][]byte
- func (re *Regexp) FindStringSubmatch(s string) []string