Contents

go标准库-Regexp

go语言中文网

godoc

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
 |