正则表达式
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),可以用来描述和匹配字符串的特定模式。
正则表达式是一种用于模式匹配和搜索文本的工具。
正则表达式提供了一种灵活且强大的方式来查找、替换、验证和提取文本数据。
正则表达式可以应用于各种编程语言和文本处理工具中,如 Golang、Python、Java、Perl 等。
匹配时的贪婪和非贪婪
例如:(abc)123245(def)
贪婪: 使用贪婪的方式可以将整个 (abc)123245(def) 进行匹配
非贪婪: 使用非贪婪的方式则只匹配 (abc) 和 (def) 中的内容
实现方法:通过在 * 、+ 或 ? 限定符之后放置 ?,该表达式从 “贪婪” 表达式转换为 “非贪婪” 表达式或者最小匹配。
package main
import (
"fmt"
"regexp"
)
func main() {
str := "(abc)123245(def)"
//贪婪
//cpl := regexp.MustCompile("[\\(].*[\\)]")
//非贪婪
cpl := regexp.MustCompile("[\\(].*?[\\)]")
words := cpl.FindAllString(str, -1)
fmt.Println(words)
}
// 输出: [(abc) (def)]
正则表达式先行断言(lookhead)后行断言(lookbehind)
先行断言: 匹配前面的字符。
//exp1(?=exp2) 匹配后面是exp2的exp1
/abc(?=[/d+])/
//exp1(?!exp2) 匹配后面不是exp2的exp1
/abc(?![/d])/
后行断言: 匹配后面的字符
//(?<=exp2)exp1 匹配前面是exp2的exp1
/(?<=[/d])abc/
//(?<!exp2)exp1 匹配前面不是exp2的exp1
/(?<![/d])abc/