1、首先看一下标准的字节数组匹配用法
isok, _ := regexp.Match("[a-zA-Z]{3}", []byte("abc"))
fmt.Printf("%v\n", isok) //true
输出结果:
true
2、测试看一下标准的字符串匹配用法
isok, _ = regexp.MatchString("[a-zA-Z]{3}", "ab2d")
fmt.Printf("%v\n", isok) //false
输出结果:
false
3、测试正则表达式对匹配结果的获取
使用字符串或键盘左上角的点效果一样的,只是不需要转义处理
//reg := regexp.MustCompile("\\w+")
reg1 := regexp.MustCompile(`\w+`)
result := reg1.FindAllString("test nb na", -1) //参数负1表示查找所有的结果
fmt.Printf("%v\n", result)
fmt.Printf("%v-%v-%v\n", result[0], result[1], result[2])
返回结果实际是字符串数组,三个单词各为一个元素
输出结果:
[test nb na]
test-nb-na
4、测试正则表达式捕获结果的的用法
reg2 := regexp.MustCompile(`^a(.*)z$`)
result2 := reg2.FindAllStringSubmatch("atest nbz naz", -1)
fmt.Printf("%v\n", result2)
fmt.Printf("%v\n", result2[0][1])
[0][1]表示第一个捕获的元素,也就是对应 (.*)这个所匹配的子串;
返回结果应该是 a开头与z结尾中间的部分,输出结果如下:
[[atest nbz naz test nbz na]]
test nbz na
5、使用正则表达提取网页中的内容
测试网址为:https://movie.douban.com/subject/26394152/?from=showing
网页内容如下:
测试提供电影的标题名称,和评分
func main() {
url := "https://movie.douban.com/subject/26394152/?from=showing"
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
sHtml, _ := ioutil.ReadAll(resp.Body)
reg := regexp.MustCompile(`<span\s*property="v:itemreviewed">(.*)</span>`)
res := reg.FindAllStringSubmatch(string(sHtml), -1)
fmt.Println(res[0][1]) //[0][1]表示第一个捕获的元素,[0][2]表示第二个捕获的元素
reg = regexp.MustCompile(`<strong\s*class="ll\s*rating_num"\s*property="v:average">(.*)</strong>`)
res = reg.FindAllStringSubmatch(string(sHtml), -1)
fmt.Println(res[0][1])
正则表达式中 \s* 表示可以有任意个空格,(.*)表示要捕获的元素字符串
执行后输出结果如下:
大黄蜂 Bumblebee
7.1