Go语言正则表达式的使用(VSCode for mac)

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
网页内容如下:
Go语言正则表达式的使用(VSCode for mac)
测试提供电影的标题名称,和评分

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