GO使用正则表达式
正则表达式:
能使用 string、strings、strcnov 包函数解决的问题,首选使用库函数。 其次再选择正则表达式。
—-字符:
“.”: 匹配任意一个字符
“[ ]”: 匹配 [ ] 内任意一个字符。
“-”:指定范围: a-z、A-Z、0-9
“^”: 取反。 使用在 [ ] 内部。[^xy]8
[[:digit:]] ——> 数字 == [0-9]
—–次数:
“?”: 匹配 前面 单元出现 0-1次
“+”:匹配 前面 单元 出现 1-N次
“*”:匹配 前面 单元 出现 0-N次
“{N}”: 匹配 前面 单元 精确匹配 N 次
“{N,}”: 匹配 前面 单元 至少匹配 N 次
“{N,M}”: 匹配 前面 单元 匹配 N — M 次。
—- 单元限定符:
“()”: 可以将一部分正则表达式,组成一个 单元,可以对该单元使用 数量限定符
Go语言使用正则:
—- 步骤:
1. 解析编译正则表达式:
MustCompile(str string) *Regexp
参数:正则表达式: 建议使用“反引号”—— ` `
返回值: 编译后的正则表达式 (结构体类型)
2. 提取需要的数据:
func (re *Regexp) FindAllStringSubmatch(s string, n int) [][]string
参数1:待匹配的字符串。
参数2:匹配次数。 -1 表匹配全部
返回值: 存储匹配结果的 [ ][ ]string
数组的每一个成员都有 string1 和 string2 两个元素。
string1:表示, 带有匹配参考项的字符串。 【0】
string2:表示,不包含匹配参考项的字符串内容。【1】
—– 提取网页标签数据:
举例: 提取
之中的数据
1)
–> 可以提取div标签的内容
2) 对于 div 标签中 含有多行内容清空:
正则表达式:(?s:(.*?))
示例
package main import ( "fmt" "regexp" ) func main(){ str := "abc a7c mfc cat aMc azc cba" //解析编译正则表达式 //ret := regexp.MustCompile(`a.c`) // ``表示使用原生字符串 //ret := regexp.MustCompile(`a[^a-z]c`) ret := regexp.MustCompile(`\d+\.\d+`) //匹配小数 //提取需要信息 alls := ret.FindAllStringSubmatch(str,-1) fmt.Println(alls) }