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