正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具。虽然正则表达式比纯粹的文本匹配效率低,但是它却更灵活。按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符组合。
Go语言通过regexp标准包为正则表达式提供了官方支持,如果你已经使用过其他编程语言提供的正则相关功能,那么你应该对Go语言版本的不会太陌生,但是它们之间也有一些小的差异,因为Go实现的是RE2标准,除了\C。
其实字符串处理我们可以使用strings包来进行搜索(Contains、Index)、替换(Replace)和解析(Split、Join)等操作,但是这些都是简单的字符串操作,他们的搜索都是大小写敏感,而且固定的字符串,如果我们需要匹配可变的那种就没办法实现了,当然如果strings包能解决你的问题,那么就尽量使用它来解决。因为他们足够简单、而且性能和可读性都会比正则好。
正则匹配规则图
详细请参考官方文档
简单的正则表达式
1. 匹配任意类型
buf := "abc azc a7c aac 888 a9c tac"
// 1. 解释规则
reg := regexp.MustCompile(`a.c`) // 这里会解析正则表达式,成功就返回解释器(. ——> 除\n外任意字符)
if reg == nil {
// 解释失败
fmt.Println("MustCompile err")
return
}
// 2. 根据规则提取关键信息
res := reg.FindAllStringSubmatch(buf, -1) //-1表示匹配所有的
// res := reg.FindAllStringSubmatch(buf, 1) //1表示匹配一个
fmt.Println("res = ", res)
执行结果:
res = [[abc] [azc