一个正则表达式(regex)是一个字符串,定义了一种搜索模式。
这里我们来学习一下go的正则表达式的使用
代码语言:javascript复制MatchString:匹配字符串
Match:匹配切片
Compile和MustCompile:创建一个编译好的正则表达式对象。假如正则表达式非法,那么Compile()方法回返回error,而MustCompile()编译非法正则表达式时不会返回error,而是回panic。如果你想要很好的性能,不要在使用的时候才调用Compile()临时进行编译,而是预先调用Compile()编译好正则表达式对象
FindString:查找字符串
FindStringIndex:得到匹配字符串的索引位置
FindAllString:是方法的All版本,它返回所有匹配的字符串的slice。如果返回nil值代表没有匹配的字符串。
ReplaceAllString:用来替换所有匹配的字符串,返回一个源字符串的拷贝。
匹配子字符串。下面我们来看例子:
代码语言:javascript复制package main
import (
"fmt"
"regexp"
)
func main() {
//MatchString 匹配字符串
str := "https://zengzhihai.com/study/wiki/type/Z29fc3R1ZHlfaW5mbw==/id/59abdaeca55d5081678b4567"
match, err := regexp.MatchString(`id`, str)
if err != nil {
fmt.Println("匹配失败")
return
}
fmt.Println("匹配成功", match)
//Match 匹配切片
b, err := regexp.Match(`id`, []byte(str))
if err != nil {
fmt.Println("匹配失败")
return
}
fmt.Println("匹配成功", b)
//Compile() 或者 MustCompile()创建一个编译好的正则表达式对象。假如正则表达式非法,那么Compile()方法回返回error,而MustCompile()编译非法正则表达式时不会返回error,而是回panic。如果你想要很好的性能,不要在使用的时候才调用Compile()临时进行编译,而是预先调用Compile()编译好正则表达式对象:
reg, err := regexp.Compile("id")
fmt.Println(reg, err)
reg1 := regexp.MustCompile("id")
fmt.Println(reg1, err)
//FindString 查找字符串
regp, err := regexp.Compile("([a-z] )")
if err != nil {
fmt.Println("Compile 失败")
return
}
fmt.Println("查找到字符串:", regp.FindString(str))
//FindStringIndex - 得到匹配字符串的索引位置
fmt.Println("匹配字符串的索引:", regp.FindStringIndex(str))
//FindAllString方法的All版本,它返回所有匹配的字符串的slice。如果返回nil值代表没有匹配的字符串。
fmt.Println("匹配所有字符串:", regp.FindAllString(str, len(str)))
//ReplaceAllString 用来替换所有匹配的字符串,返回一个源字符串的拷贝。
fmt.Println("替换所有匹配字符串:", regp.ReplaceAllString(str, "my"))
}
返回结果如下:
代码语言:javascript复制id <nil>
查找到字符串:https
匹配字符串的索引:[0 5]
匹配所有字符串:[https zengzhihai com study wiki type fc lfa mbw id abdaeca d b]
替换所有匹配字符串:my://my.my/my/my/my/Z29my3R1ZHmyW5my==/my/59my55my5081678my4567
总结:如果使用查找字符串,我们一般先全局编译好正则表达式对象,避免重复使用,然后直接用匹配函数。