通过实例简单了解正则表达式在go中的使用
项目需要简单解析网址,并提取其中的信息,网址如下:
https://www.codedesigner.net/exec/1079/1902
下面分为验证和提取两部分
验证
在进行验证这个url的时候,可以使用如下的pattern
^(\w+):\/\/([^/:]+)\/([^/:]+)\/(\d*)?\/(\d*)$
,该字符串使用``圈起来
其中含义如下:
- ^ 表示匹配输入字符串的开始位置,可以理解为字符串从^处开始匹配
- $ 表示匹配输入字符串的结束位置,可以理解为字符串从^处结束匹配
- () 表示一个组,即这个组中的内容可以重复多次
简单分析下正则和url的匹配:
(\w+)表示,匹配包括下划线的任何单词字符
://即是://的意思,/前加上的\即为转义
因此这一段匹配了https://这个协议头
[^]
表示负字符范围,即排除方括号中的字符,([^/:]+)
即表示排除:和/之外,匹配多个字符
上述([^/:]+)\/([^/:]+)\/
即匹配到了
www.codedesigner.net/exec/
\d
为匹配数字,*
表示匹配前面的子表达式零次或多次
(\d*)?
即是匹配一个或多个数字,?
表示匹配前面的子表达式零次或一次
上述(\d*)?\/(\d*)
即匹配到了
1079/1092
go中匹配的代码如下
a := "https://www.codedesigner.net/exec/1079/1902"
if m, _ := regexp.MatchString(`^(\w+):\/\/([^/:]+)\/([^/:]+)\/(\d*)?\/(\d*)$`, a); !m {
fmt.Println(false)
} else {
fmt.Println(true)
}
提取
在一些情况下,上述url不仅涉及到匹配,还涉及到了里面内容的提取,项目中要求提取出来最后的1079/1092两个数字,做法如下
b := "https://www.codedesigner.net/exec/1079/1902"
re, _ := regexp.Compile(`\d+`)
//查找符合正则的第一个
all := re.FindAll([]byte(b),-1)
for _,item := range all {
fmt.Println(string(item))
}