《Go Web 编程》正则处理

  • 判断是否匹配:regexp 包中含有三个函数用来判断是否匹配,如果匹配,则返回 true,否则返回 false func Match(pattern string, b []byte) (matched bool, err error)

    func MatchReader(pattern string, r io.RuneReader) (matched bool, err error)

    func MatchString(pattern string, s string) (matched bool, err error)

    上面 3 个函数的作用都是判断 pattern 是否和输入源匹配,若匹配,就返回 true,如果解析正则出错,则返回 error。

    例子:

    if len(os.Args) == 1 {
        fmt.Println("Usage: regexp [string]")
        os.Exit(1)
    } else if m, _ := regexp.MatchString("^[0-9]+$", os.Args[1]); m {
        fmt.Println("是数字")
    } else {
        fmt.Println("不是数字")
    }
   //爬虫爬取内容后处理
    resp, err := http.Get("https://baidu.com")
    if err != nil {
        fmt.Println("http get error", err)
    }

    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("http read error")
        return
    }

    src := string(body)
    //将 HTML 标签转换成小写
    re, _ := regexp.Compile("\\<[\\S\\s]+?\\>")
    src = re.ReplaceAllStringFunc(src, strings.ToLower)
    //去除 style
    re, _ = regexp.Compile("\\<style[\\S\\s]+?\\</style\\>")
    src = re.ReplaceAllString(src, "")
    //去除 script
    re, _ = regexp.Compile("\\<script[\\S\\s]+?\\</script\\>")
    src = re.ReplaceAllString(src, "")
    //去除所有尖括号内的 HTML 代码,并转换为换行符
    re, _ = regexp.Compile("\\<[\\S\\s]+?\\>")
    src = re.ReplaceAllString(src, "\n")
    //取出连续的换行符
    re, _ = regexp.Compile("\\s{2,}")
    src = re.ReplaceAllString(src, "\n")

    fmt.Println(strings.TrimSpace(src))
  • 通过正则获取内容