跳过正文
  1. 文章/
  2. GoLang/
  3. 常用包/
  4. 标准包/

11、regexp

·871 字·2 分钟· loading · loading · ·
GoLang 常用包 标准包
GradyYoung
作者
GradyYoung
标准包 - 点击查看当前系列文章
§ 11、regexp 「 当前文章 」

regexp
#

Go 语言的 regexp 包提供了对正则表达式的支持。

regexp 包支持对字符串的匹配、搜索和替换。它基于 RE2 正则表达式引擎,性能优异,避免了回溯带来的性能瓶颈。该包提供了多个函数来编译正则表达式并进行匹配、查找、替换等操作。

以下是Go语言regexp包的具体操作步骤:

  1. 使用regexp.Compile或者regexp.MustCompile函数编译正则表达式,返回一个Regexp类型的对象。
  2. 使用Regexp对象的MatchFindFindAllStringFindAllStringSubmatchReplaceSplit方法来实现正则表达式的匹配、替换和分割操作。

常用函数
#

编译正则表达式
#

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]
标准包 - 点击查看当前系列文章
§ 11、regexp 「 当前文章 」