参看文档

语法

  • . :匹配任意单个字符,除了换行符。
    • :匹配前面的元素零次或多次。
    • :匹配前面的元素一次或多次。
  • ? :匹配前面的元素零次或一次。
  • ^ :匹配字符串的开头。
  • $ :匹配字符串的结尾。
  • [] :字符类,匹配方括号中的任意字符。
  • [^] :否定字符类,匹配除方括号中字符以外的任意字符。
  • | :逻辑或,匹配两个模式之一。
  • () :捕获组,用于分组和提取匹配的子字符串。

标志

  • i:忽略大小写,使匹配对大小写不敏感。
  • m:多行模式,允许 ^ 和 $ 匹配文本的每一行的开头和结尾。
  • s:单行模式,使点号 . 可以匹配换行符。
  • U:非贪婪模式,使匹配尽可能少地进行。
package main

import (
"fmt"
"regexp"
)

func main() {
    str := "Hello\nworld"
    re := regexp.MustCompile((?m)^(\w+))
    matches := re.FindAllStringSubmatch(str, -1)
    for _, match := range matches {
        fmt.Println("Matched:", match[0])
        fmt.Println("Capture Group 1:", match[1])
    }
}

反向引用

反向引用允许你在正则表达式中引用先前匹配的捕获组。通过使用 \n

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "hello hello"

    re := regexp.MustCompile(`(\w+) \1`)
    match := re.MatchString(str)
    fmt.Println(match) // true
}