wx

关注公众号

regexp


Golang 标准库 - regexp

regexp 包实现了正则表达式搜索。正则表达式采用 RE2 语法,保证线性时间复杂度。

主要功能说明:

  1. 编译正则表达式

    • Compile() 编译正则(返回错误)
    • MustCompile() 编译正则(panic 失败)
    • CompilePOSIX() POSIX 语法编译
  2. 匹配检查

    • MatchString() 检查字符串是否匹配
    • Match() 检查字节切片是否匹配
    • FindString() 查找匹配字符串
  3. 查找与提取

    • FindAllString() 查找所有匹配
    • FindStringSubmatch() 提取子匹配
    • FindStringIndex() 查找位置索引
  4. 替换与分割

    • ReplaceAllString() 替换所有匹配
    • ReplaceAllStringFunc() 使用函数替换
    • Split() 按正则分割

func main() {
	// 1. 编译正则表达式
	fmt.Println("=== 编译正则 ===")
	re, err := regexp.Compile(`[a-z]+`)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("编译成功")

	// MustCompile 在编译失败时 panic
	re2 := regexp.MustCompile(`\d+`)
	fmt.Println("MustCompile 成功")

	// 2. 匹配检查
	fmt.Println("\n=== 匹配检查 ===")
	fmt.Println(re.MatchString("hello123")) // true
	fmt.Println(re2.MatchString("abc"))     // false
	fmt.Println(re2.MatchString("123"))     // true

	// 3. 查找匹配
	fmt.Println("\n=== 查找匹配 ===")
	
	// 查找第一个匹配
	found := re.FindString("abc123def456")
	fmt.Println("FindString:", found) // abc

	// 查找所有匹配
	allFound := re2.FindAllString("abc123def456ghi789", -1)
	fmt.Printf("FindAllString: %v\n", allFound) // [123 456 789]

	// 查找位置
	loc := re.FindStringIndex("abc123def")
	fmt.Printf("FindStringIndex: %v\n", loc) // [0 3]

	// 4. 子匹配提取
	fmt.Println("\n=== 子匹配提取 ===")
	re3 := regexp.MustCompile(`(\w+)@(\w+)\.(\w+)`)
	email := "contact@example.com"
	
	submatch := re3.FindStringSubmatch(email)
	fmt.Printf("子匹配: %v\n", submatch)
	// [contact@example.com contact example com]

	// 5. 替换
	fmt.Println("\n=== 替换 ===")
	replaced := re2.ReplaceAllString("abc123def456", "X")
	fmt.Println("ReplaceAllString:", replaced) // abcXdefX

	// 使用函数替换
	result := re2.ReplaceAllStringFunc("123 456 789", func(s string) string {
		return "[" + s + "]"
	})
	fmt.Println("ReplaceAllStringFunc:", result) // [123] [456] [789]

	// 6. 分割
	fmt.Println("\n=== 分割 ===")
	parts := regexp.MustCompile(`\s+`).Split("hello   world\tgo", -1)
	fmt.Printf("Split: %v\n", parts) // [hello world go]
}
如有疑问关注公众号给我留言
wx

关注公众号

©2017-2023 鲁ICP备17023316号-1 Powered by Hugo