正则表达式特点:用的时候不会,学会之后就忘。每次用到现学现看,照葫芦画瓢,用起来不舒服,整理常用的正则表达式用法,及Golang 正则库使用。
元字符
| 元字符 | 含义 | 样例 |
|---|---|---|
| .(点) | 匹配除\n \r 以外的任何字符 | c.t ,匹配cat、cbt、cct等 |
| [xy](中括号) | 单字符匹配 或 的关系 | c[abc]t ,匹配cat、cbt、cct等 |
| * | 前面的表达式重复任意次数 | ca*t ,匹配ct、cat、caat、caaat等 |
| + | 前面的表达式重复至少一次 | ca+t ,匹配cat、caat、caaat等 |
| ? | 前面的表达式重复至少一次 | ca?t ,匹配ct、cat |
| ^ | 如果出现在开头,表示以xx开头 | ^my ,匹配my love |
| ^ | 如果出现在中括号内,表示取非计算 | [^c]at ,匹配除了cat 以外的 bat、dat等 |
| $ | 如果出现在结尾,表示以xx结尾 | ve$ ,匹配my love |
| {n} | 匹配前一个表达式次数 | ca{2}t ,匹配caat |
| {n,} | 匹配前一个表达式至少次数 | ca{2,}t ,匹配caat、caaat |
| {n,m} | 匹配前一个表达式的次数区间 | ca{2,4}t ,匹配caat、caaat,caaaat |
| ? | 跟在+*.{n}等后面的?,表示非贪婪匹配 | 通常用于匹配、输出字符串 |
| [a-z][A-Z] | 匹配一个范围 | [a-zA-Z0-9]等 |
| \s | 任何不可见字符,包括空格、制表 | |
| \S | 任何可见字符 | |
| \w | 包括数字、字母、下划线等单词 | |
| \W | 上面的描述取反 | |
| \d | 数字0-9 | |
| \D | 匹配非数字 | |
| ?: | 正向匹配 | www.baidu1.com www.baidu(?:1),会匹配www.baidu,golang原生包不支持正向、反向匹配 |
| ?<=: | 反向匹配 | 非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95 |
Golang
注意:使用正向、反向匹配使用 “github.com/dlclark/regexp2” 库
MatchString 判断是否与正则匹配
func main() {
text := `www.baidu123.com`
reg := regexp.MustCompile(`w{3}\..*\.com`)
fmt.Printf("%v\n", reg.MatchString(text))
}
FindAllStringSubmatch 找到所有匹配的字符串
func main() {
text := `www.baidu123.comabc123 www.123.com`
reg := regexp.MustCompile(`w{3}\..*\.com`)
fmt.Printf("%v\n", reg.FindAllStringSubmatch(text, -1))
}
结果:
[[www.baidu123.comabc123 www.123.com]]
文章介绍了正则表达式的基本概念和常用元字符,如点、中括号、星号、加号等,并展示了如何在Golang中使用`regexp`库进行匹配和查找操作。特别提到了非贪婪匹配和正向、反向匹配,指出Golang原生库不支持这些功能,需要使用第三方库`github.com/dlclark/regexp2`。

被折叠的 条评论
为什么被折叠?



