12. 正则表达式

1 编译函数

Compile函数或MustCompile函数是将正则表达式进行编译,返回优化的 Regexp 结构体

  1. Compile: 返回两个参数*Regexp,error类型
  2. MustCompile: 只返回*Regexp类型

2 正则匹配

2.1 1. MatchString

返回的第一个参数是bool类型即匹配结果,第二个参数是error类型

  • demo

    1
    2
    3
    
    sourceStr := `my email is [email protected]`
    matched, _ := regexp.MatchString(`[\w-]+@[\w]+(?:\.[\w]+)+`, sourceStr)
    fmt.Printf("%v", matched) // true
    

2.2 2. FindString

返回一个字符串,该字符串具有最左边匹配的文本。如果找不到匹配项,则返回空字符串。

  • demo

    1
    2
    3
    
    r,_:=regexp.Compile("p([a-z]+)ch")
    //查找匹配的字符串
    fmt.Println(r.FindString("peach punch"))  //打印结果:peach
    

2.3 3. FindStringIndex

查找第一个匹配字符串开始结束位置的索引,而不是匹配内容

  • demo

    1
    2
    3
    
    r,_:=regexp.Compile("p([a-z]+)ch")
    // 查找匹配字符串开始和结束位置的索引,而不是匹配内容[0 5]
    fmt.Println(r.FindStringIndex("peach punch"))  //打印结果: [0 5]
    

2.4 4. FindStringSubmatch

查找第一个, 返回完全匹配和局部匹配的字符串

  • dmeo

    1
    2
    3
    
    r,_:=regexp.Compile("p([a-z]+)ch")
    //返回完全匹配和局部匹配的字符串,例如,这里会返回  p([a-z]+)ch 和 `([a-z]+) 的信息
    fmt.Println(r.FindStringSubmatch("peach punch"))   //打印结果:[peach ea]
    

2.5 5. FindAllString

查找字符串中所有符合规则的,可以指定个数

  • demo

    1
    2
    
    r, _ := regexp.Compile("p([a-z]+)ch")
    fmt.Println(r.FindAllString("aapeach punch pqwerch", 2)) //打印结果: [peach punch]
    

2.6 6. FindStringIndex

查找全部 匹配字符串开始结束位置的索引,而不是匹配内容

  • demo

    1
    2
    
    	r, _ := regexp.Compile("p([a-z]+)ch")
    	fmt.Println(r.FindAllStringIndex("aapeach punch pqwerch", 2)) //打印结果: [[2 7] [8 13]]
    

2.7 7. FindAllStringSubmatch

返回全部的 完全匹配和局部匹配的字符串,可以指定个数

  • demo

    1
    2
    
    	r, _ := regexp.Compile("p([a-z]+)ch")
    	fmt.Println(r.FindAllStringSubmatch("aapeach punch pqwerch", 2)) //打印结果: [[peach ea] [punch un]]
    

2.8 7. ReplaceAllString

将匹配的结果,替换成新输入的结果, 没有匹配到返回原string

  • demo

    1
    2
    
    	r, _ := regexp.Compile("p([a-z]+)ch")
    	fmt.Println(r.ReplaceAllString("aapeach punch pqwerch", "-")) //打印结果: aa- - -
    

2.9 8. ReplaceAllFunc

  • demo

    1
    2
    3
    4
    
    //Func 变量允许传递匹配内容到一个给定的函数中,
    in:=[]byte("a peach")
    out:=r1.ReplaceAllFunc(in,bytes.ToUpper)
    fmt.Printf(string(out)) //打印结果:   a PEACH
    
Buy me a coffee~
Fred 支付宝支付宝
Fred 微信微信
0%