\s 表示: 匹配任意空白字符,等价于 [ \t\n\r\f]
\S 表示: 匹配任意非空字符
var (
//超链接
reSuperUrl = `<a[\s\S]+?href="(http[\s\S]+?)"`
//以<a开头 [\s\S] \s匹配任意空白字符 \S匹配任意非空字符 +一次到多次 ?当匹配到后边的href的时候停止前面的匹配
//()分组 以http开头 匹配非空字符或者空字符任意一种 +一次或者多次 ?匹配到后边的"则停止匹配, 匹配完毕
//如果没有?则可能一直向后变匹配下午 贪婪模式
)
func HandleErr(err error, when string) {
if err!=nil {
fmt.Println(when, err)
os.Exit(1)
}
}
func main() {
//爬取超链接
getSuperLink()
}
func getSuperLink() {
html := getHtml("http://www.hao123.com")
//fmt.Println(html)
re := regexp.MustCompile(reSuperUrl)
supers := re.FindAllStringSubmatch(html, -1)
fmt.Println("总共: ", len(supers))
for _, value := range supers {
fmt.Println(value[1])
}
}
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
}