regexp #
Go 语言的 regexp 包提供了对正则表达式的支持。
regexp 包支持对字符串的匹配、搜索和替换。它基于 RE2 正则表达式引擎,性能优异,避免了回溯带来的性能瓶颈。该包提供了多个函数来编译正则表达式并进行匹配、查找、替换等操作。
以下是Go语言regexp包的具体操作步骤:
- 使用
regexp.Compile或者regexp.MustCompile函数编译正则表达式,返回一个Regexp类型的对象。 - 使用
Regexp对象的Match、Find、FindAllString、FindAllStringSubmatch、Replace和Split方法来实现正则表达式的匹配、替换和分割操作。
常用函数 #
编译正则表达式 #
Compile #
regexp.Compile(pattern string) (*Regexp, error)
该函数用于编译正则表达式字符串 pattern,并返回一个 Regexp 类型对象。如果正则表达式无效,会返回一个错误。
r, err := regexp.Compile(`\d+`) // 匹配一个或多个数字
if err != nil {
fmt.Println("Error compiling regex:", err)
return
}
MustCompile #
regexp.MustCompile(pattern string) *Regexp
该函数与 Compile 类似,不过如果正则表达式不合法,它会立即 panic。适合在启动时使用,确保正则表达式是合法的。
r := regexp.MustCompile(`\d+`)
匹配操作 #
简单匹配 #
matched, _ := regexp.MatchString(`^Hello`, "Hello World") // true
MatchString #
r.MatchString(s string) bool
该方法检查给定的字符串 s 是否匹配正则表达式。如果匹配,返回 true,否则返回 false。
r := regexp.MustCompile(`\d+`)
fmt.Println(r.MatchString("12345")) // 输出:true
fmt.Println(r.MatchString("abc")) // 输出:false
查找操作 #
FindString #
r.FindString(s string) string
该方法查找字符串中第一个匹配正则表达式的子字符串并返回。如果没有找到匹配项,则返回空字符串。
r := regexp.MustCompile(`\d+`)
fmt.Println(r.FindString("abc 12345 xyz")) // 输出:12345
FindAllString #
r.FindAllString(s string, n int) []string
查找字符串中所有匹配正则表达式的子字符串,并返回一个字符串切片。如果 n 为 -1,则表示返回所有匹配的子串。
r := regexp.MustCompile(`\d+`)
fmt.Println(r.FindAllString("abc 123 4567 89", -1)) // 输出:[123 4567 89]
FindStringSubmatch #
r.FindStringSubmatch(s string) []string
查找第一个匹配的子字符串,并返回每个捕获组的内容(包括完整匹配)。
r := regexp.MustCompile(`(\d+)-(\d+)`)
match := r.FindStringSubmatch("abc 123-4567")
fmt.Println(match) // 输出:[[123-4567 123 4567]]
替换操作 #
ReplaceAllString #
r.ReplaceAllString(s string, repl string) string
该方法用于替换字符串中所有匹配正则表达式的子字符串。repl 是替换的文本。
r := regexp.MustCompile(`\d+`)
result := r.ReplaceAllString("abc 123 4567 xyz", "#")
fmt.Println(result) // 输出:abc # # xyz
分割操作 #
Split #
r.Split(s string, n int) []string
根据正则表达式分割字符串,返回一个字符串切片。n 参数表示最多分割的次数。
r := regexp.MustCompile(`\s+`)
fmt.Println(r.Split("this is a test", -1)) // 输出:[this is a test]