go-正则匹配邮箱

\w 匹配字母数字及下划线

var (
	//reEmail = `[1-9]\d{4,}@qq.com` //邮箱
	//reEmail = `\w+@\w+.com` //邮箱
	reEmail = `[\w\.]+@\w+\.[a-z]{2,3}(\.[a-z]{2,3})?` //邮箱  
    /**
        [\w\.]+  表示字母字符或者.其中一个出现 +1到多次
        [a-z]{2,3} 表示a-z任意其中一个字符 出现2到3次
        (\.[a-z]{2,3})?  ()表示分组   a到z中任意一个出现2到3次  ? 该分组出现0到1次
    */
)

func HandleErr(err error, when string)  {
	if err!=nil {
		fmt.Println(when, err)
		os.Exit(1)
	}
}



func main() {
	//获取e-mail
	getEmail()

}

func getEmail()  {
	html := getHtml("https://tieba.baidu.com/p/6020321354?red_tag=1561896880")
	html+="[email protected]"
	html+="[email protected];"
	html+="[email protected]"
	re := regexp.MustCompile(reEmail)
	//-1 表示匹配所有  如果输入5  表示只匹配5个
	phones :=  re.FindAllStringSubmatch(html, -1)
	fmt.Println("总共: ", len(phones))
	for i := 0; i < len(phones); i++ {
		fmt.Println(phones[i][0])
	}
}

func getHtml(url string)(html string)  {
	fmt.Printf("001_正则表达式")
	resp, err := http.Get(url)
	HandleErr(err,`http.Get(s)`)
	bytes, err := ioutil.ReadAll(resp.Body)
	if err!=nil {
		fmt.Println("ioutil.ReadAll err:",err)
	}
	html = string(bytes)
	return
}

猜你喜欢

转载自blog.csdn.net/Batac_Lee/article/details/109903460