```
package main
import (
"fmt"
"regexp"
)
func main() {
//測試一個字符串是否符合一個表達式
match, _ := regexp.MatchString("p([a-z]+)ch", "peach")
fmt.Println(match)
r, _ := regexp.Compile("p([a-z]+)ch") //上面我們是直接使用字符串,但是對于一些其他的正則任務,你需要使用 Compile 一個優化的 Regexp 結構體。
fmt.Println(r.MatchString("peach")) //這個結構體有很多方法。這里是類似我們前面看到的一個匹配測試。
fmt.Println(r.FindString("peach punch")) //FindString是查找匹配字符串的。
fmt.Println(r.FindStringIndex("peach punch")) //FindStringIndex是查找第一次匹配的字符串的,但是返回的匹配開始和結束位置索引,而不是匹配的內容。
fmt.Println(r.FindStringSubmatch("peach punch")) //Submatch 返回完全匹配和局部匹配的字符串。會返回 p([a-z]+)ch 和 `([a-z]+) 的信息。
fmt.Println(r.FindStringSubmatchIndex("peach punch")) //返回完全匹配和局部匹配的索引位置。
fmt.Println(r.FindAllString("peach punch pinch", -1)) //帶 All 的這個函數返回所有的匹配項,而不僅僅是首次匹配項。例如查找匹配表達式的所有項。
fmt.Println(r.FindAllStringSubmatchIndex("peach punch pinch", -1)) //All 同樣可以對應到上面的所有函數。
fmt.Println(r.FindAllString("peach punch pinch", 2)) //FindAllString函數提供一個正整數來限制匹配次數。
context1 := "3.14 123123 .68 haha 1.0 abc 6.66 123."
//MustCompile解析并返回一個正則表達式。如果成功返回,該Regexp就可用于匹配文本。
//解析失敗時會產生panic
// \d 匹配數字[0-9],d+ 重復>=1次匹配d,越多越好(優先重復匹配d)
exp1 := regexp.MustCompile(`\d+\.\d+`)
//返回保管正則表達式所有不重疊的匹配結果的[]string切片。如果沒有匹配到,會返回nil。
//result1 := exp1.FindAllString(context1, -1) //[3.14 1.0 6.66]
result1 := exp1.FindAllStringSubmatch(context1, -1) //[[3.14] [1.0] [6.66]]
fmt.Printf("%v\n", result1)
fmt.Printf("\n***************\n\n")
context2 := `<title>NBA</title><div>湖人又輸了</div><div>NBA</div><div>詹姆斯無力回天</div><body>詹皇會怎么帶領小蔣們呢</body>`
//(.*?)被括起來的表達式作為分組
//匹配<div>xxx</div>模式的所有子串
exp2 := regexp.MustCompile(`<div>(.*?)</div>`)
result2 := exp2.FindAllStringSubmatch(context2, -1)
fmt.Printf("%v\n", result2) //[[<div>湖人又輸了</div> 湖人又輸了] [<div>NBA</div> NBA] [<div>詹姆斯無力回天</div> 詹姆斯無力回天]]
fmt.Printf("\n***************\n\n")
context3 := `<title>標題</title><div>火箭大勝國王</div><div>Hello NBA</div><div>詹姆斯哈登</div><body>保羅</body>`
exp3 := regexp.MustCompile(`<div>(.*?)</div>`)
result3 := exp3.FindAllStringSubmatch(context3, -1)
fmt.Printf("%v\n", result3) //[[<div>火箭大勝國王</div> 火箭大勝國王] [<div>Hello NBA</div> Hello NBA] [<div>詹姆斯哈登</div> 詹姆斯哈登]]
fmt.Printf("\n***************\n\n")
}
```
https://blog.csdn.net/tennysonsky/article/details/79081524