正则表达式:

能使用 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)

}