\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
}