概述

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。结果切片中:

  1. 第一个索引值是:最左侧的一个匹配结果
  2. 从第二个开始,是分组匹配结果
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"]
最后修改:2023 年 12 月 30 日
如果觉得我的文章对你有用,请随意赞赏