+ 表示1个到多个
* 表示0个到多个
? 表示0个到1个
{m, n} 表示m到n次
{0, n} 表示0次到n次
[a-z] 表示a到z中任意一个
[abc] 表示abc中任意一个
[^abc] 表示出了abc的其他任意字符
a|b 表示a或者b
`1[3456789]\d{9}`
第一位: 1开头;
扫描二维码关注公众号,回复:
12444427 查看本文章
![](/qrcode.jpg)
第二位: [3456789] 表示3456789中任意一个;
之后的表示: \d数字部分 {9} 共9位
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"regexp"
)
var (
//rePhone = `1[3456789]\d{9}`
rePhone = `(1[3456789]\d)(\d{4})(\d{4})` //每组用()括着 匹配包含一个组或者两组合起来或者四组合起来的字符
)
func HandleErr(err error, when string) {
if err!=nil {
fmt.Println(when, err)
os.Exit(1)
}
}
func main() {
fmt.Printf("001_正则表达式")
s := "https://beijing.zhaohaowang.com/ydcard.html"
resp, err := http.Get(s)
HandleErr(err,`http.Get(s)`)
bytes, err := ioutil.ReadAll(resp.Body)
if err!=nil {
fmt.Println("ioutil.ReadAll err:",err)
}
html := string(bytes)
//fmt.Println("html:", html)
re := regexp.MustCompile(rePhone)
phones := re.FindAllStringSubmatch(html, -1)
//fmt.Println("phones:",phones)
fmt.Println("总共: ",len(phones), "个")
for i := 0; i < len(phones); i++ {
fmt.Println(phones[i])
}
}