go-正则匹配电话号码

+   表示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开头;

第二位: [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])
	}

}

猜你喜欢

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