Go 正则表达式

优质
小牛编辑
142浏览
2023-12-01

Go内置了对正则表达式的支持,这里是一般的正则表达式常规用法的例子。

  1. package main
  2. import "bytes"
  3. import "fmt"
  4. import "regexp"
  5. func main() {
  6. // 测试模式是否匹配字符串,括号里面的意思是
  7. // 至少有一个a-z之间的字符存在
  8. match, _ := regexp.MatchString("p([a-z]+)ch", "peach")
  9. fmt.Println(match)
  10. // 上面我们直接使用了字符串匹配的正则表达式,
  11. // 但是对于其他的正则匹配任务,你需要使用
  12. // `Compile`来使用一个优化过的正则对象
  13. r, _ := regexp.Compile("p([a-z]+)ch")
  14. // 正则结构体对象有很多方法可以使用,比如上面的例子
  15. // 也可以像下面这么写
  16. fmt.Println(r.MatchString("peach"))
  17. // 这个方法检测字符串参数是否存在正则所约束的匹配
  18. fmt.Println(r.FindString("peach punch"))
  19. // 这个方法查找第一次匹配的索引,并返回匹配字符串
  20. // 的起始索引和结束索引,而不是匹配的字符串
  21. fmt.Println(r.FindStringIndex("peach punch"))
  22. // 这个方法返回全局匹配的字符串和局部匹配的字符,比如
  23. // 这里会返回匹配`p([a-z]+)ch`的字符串
  24. // 和匹配`([a-z]+)`的字符串
  25. fmt.Println(r.FindStringSubmatch("peach punch"))
  26. // 和上面的方法一样,不同的是返回全局匹配和局部匹配的
  27. // 起始索引和结束索引
  28. fmt.Println(r.FindStringSubmatchIndex("peach punch"))
  29. // 这个方法返回所有正则匹配的字符,不仅仅是第一个
  30. fmt.Println(r.FindAllString("peach punch pinch", -1))
  31. // 这个方法返回所有全局匹配和局部匹配的字符串起始索引
  32. // 和结束索引
  33. fmt.Println(r.FindAllStringSubmatchIndex("peach punch pinch", -1))
  34. // 为这个方法提供一个正整数参数来限制匹配数量
  35. fmt.Println(r.FindAllString("peach punch pinch", 2))
  36. //上面我们都是用了诸如`MatchString`这样的方法,其实
  37. // 我们也可以使用`[]byte`作为参数,并且使用`Match`
  38. // 这样的方法名
  39. fmt.Println(r.Match([]byte("peach")))
  40. // 当使用正则表达式来创建常量的时候,你可以使用`MustCompile`
  41. // 因为`Compile`返回两个值
  42. r = regexp.MustCompile("p([a-z]+)ch")
  43. fmt.Println(r)
  44. // regexp包也可以用来将字符串的一部分替换为其他的值
  45. fmt.Println(r.ReplaceAllString("a peach", "<fruit>"))
  46. // `Func`变量可以让你将所有匹配的字符串都经过该函数处理
  47. // 转变为所需要的值
  48. in := []byte("a peach")
  49. out := r.ReplaceAllFunc(in, bytes.ToUpper)
  50. fmt.Println(string(out))
  51. }

运行结果

  1. true
  2. true
  3. peach
  4. [0 5]
  5. [peach ea]
  6. [0 5 1 3]
  7. [peach punch pinch]
  8. [[0 5 1 3] [6 11 7 9] [12 17 13 15]]
  9. [peach punch]
  10. true
  11. p([a-z]+)ch
  12. a <fruit>
  13. a PEACH