概述
Go 中使用正则表达式,主要依赖于 regexp 包来使用的。
是否匹配
使用 Match 方法,查看字符串是否匹配上,第二个参数是 byte 切片
isOk, err := regexp.Match("[a-z]{3}", []byte("abc"))
println(isOk, err)
因为Match需要传入切片字节,会比较麻烦,可以使用 MatchString 方法,可以直接传入字符串
isOk, err := regexp.MatchString("[a-z]{3}", "abc")
println(isOk, err)
匹配结果
首先使用 MustCompile 方法,返回一个正则实例。然后调用 FindAllString 方法获取匹配到所有结果
re := regexp.MustCompile("a.")
fmt.Println(re.FindAllString("paranormal", -1)) // 输出所有匹配结果[ar an al]
fmt.Println(re.FindAllString("paranormal", 2)) // 只输出结果中的前2个[ar an]
fmt.Println(re.FindAllString("graal", -1)) // aa
fmt.Println(re.FindAllString("none", -1)) // []
如果只是想要获取最左侧的一个匹配结果,以及(可能有的)分组匹配的结果的[]string 切片,可以使用 FindStringSubmatch。结果切片中:
- 第一个索引值是:最左侧的一个匹配结果
- 从第二个开始,是分组匹配结果
re := regexp.MustCompile("a(x*)b(y|z)c")
fmt.Printf("%q\n", re.FindStringSubmatch("-axxxbyc-axxxbyc")) // ["axxxbyc" "xxx" "y"]
fmt.Printf("%q\n", re.FindStringSubmatch("-abzc-")) // ["abzc" "" "z"]