go的正则表达式-MatchString,FindString等的使用

2022-04-25 09:02:18 浏览数 (1)

一个正则表达式(regex)是一个字符串,定义了一种搜索模式。

这里我们来学习一下go的正则表达式的使用

代码语言:javascript复制
MatchString:匹配字符串
Match:匹配切片
Compile和MustCompile:创建一个编译好的正则表达式对象。假如正则表达式非法,那么Compile()方法回返回error,而MustCompile()编译非法正则表达式时不会返回error,而是回panic。如果你想要很好的性能,不要在使用的时候才调用Compile()临时进行编译,而是预先调用Compile()编译好正则表达式对象
FindString:查找字符串
FindStringIndex:得到匹配字符串的索引位置
FindAllString:是方法的All版本,它返回所有匹配的字符串的slice。如果返回nil值代表没有匹配的字符串。
ReplaceAllString:用来替换所有匹配的字符串,返回一个源字符串的拷贝。

匹配子字符串。下面我们来看例子:

代码语言:javascript复制
package main

import (
  "fmt"
  "regexp"
)

func main() {
  //MatchString 匹配字符串
  str := "https://zengzhihai.com/study/wiki/type/Z29fc3R1ZHlfaW5mbw==/id/59abdaeca55d5081678b4567"
  match, err := regexp.MatchString(`id`, str)
  if err != nil {
    fmt.Println("匹配失败")
    return
  }
  fmt.Println("匹配成功", match)
  //Match 匹配切片
  b, err := regexp.Match(`id`, []byte(str))
  if err != nil {
    fmt.Println("匹配失败")
    return
  }
  fmt.Println("匹配成功", b)
  //Compile() 或者 MustCompile()创建一个编译好的正则表达式对象。假如正则表达式非法,那么Compile()方法回返回error,而MustCompile()编译非法正则表达式时不会返回error,而是回panic。如果你想要很好的性能,不要在使用的时候才调用Compile()临时进行编译,而是预先调用Compile()编译好正则表达式对象:
  reg, err := regexp.Compile("id")
  fmt.Println(reg, err)
  reg1 := regexp.MustCompile("id")
  fmt.Println(reg1, err)
  //FindString 查找字符串
  regp, err := regexp.Compile("([a-z] )")
  if err != nil {
    fmt.Println("Compile 失败")
    return
  }
  fmt.Println("查找到字符串:", regp.FindString(str))
  //FindStringIndex - 得到匹配字符串的索引位置
  fmt.Println("匹配字符串的索引:", regp.FindStringIndex(str))
  //FindAllString方法的All版本,它返回所有匹配的字符串的slice。如果返回nil值代表没有匹配的字符串。
  fmt.Println("匹配所有字符串:", regp.FindAllString(str, len(str)))
  //ReplaceAllString 用来替换所有匹配的字符串,返回一个源字符串的拷贝。
  fmt.Println("替换所有匹配字符串:", regp.ReplaceAllString(str, "my"))

}

返回结果如下:

代码语言:javascript复制
id <nil>
查找到字符串:https
匹配字符串的索引:[0 5]
匹配所有字符串:[https zengzhihai com study wiki type fc lfa mbw id abdaeca d b]
替换所有匹配字符串:my://my.my/my/my/my/Z29my3R1ZHmyW5my==/my/59my55my5081678my4567

总结:如果使用查找字符串,我们一般先全局编译好正则表达式对象,避免重复使用,然后直接用匹配函数。

0 人点赞