正则表达式

正则表达式基础知识

  • 正则表达式
    • 匹配时的贪婪和非贪婪
    • 正则表达式先行断言(lookhead)后行断言(lookbehind)

正则表达式

正则表达式(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/

//(?
/(?<![/d])abc/

你可能感兴趣的:(算法,正则表达式)