通过实例简单了解正则表达式在go中的使用

项目需要简单解析网址,并提取其中的信息,网址如下:
https://www.codedesigner.net/exec/1079/1902
下面分为验证和提取两部分

验证

^(\w+):\/\/([^/:]+)\/([^/:]+)\/(\d*)?\/(\d*)$
  1. ^ 表示匹配输入字符串的开始位置,可以理解为字符串从^处开始匹配
  2. $ 表示匹配输入字符串的结束位置,可以理解为字符串从^处结束匹配
  3. () 表示一个组,即这个组中的内容可以重复多次

简单分析下正则和url的匹配:
(\w+)表示,匹配包括下划线的任何单词字符
://即是://的意思,/前加上的\即为转义
因此这一段匹配了https://这个协议头

[^]([^/:]+)([^/:]+)\/([^/:]+)\/
\d*(\d*)??(\d*)?\/(\d*)

go中匹配的代码如下

a := "https://www.codedesigner.net/exec/1079/1902"
    if m, _ := regexp.MatchString(`^(\w+):\/\/([^/:]+)\/([^/:]+)\/(\d*)?\/(\d*)$`, a); !m {
        fmt.Println(false)
    } else {
        fmt.Println(true)
    }

提取

在一些情况下,上述url不仅涉及到匹配,还涉及到了里面内容的提取,项目中要求提取出来最后的1079/1092两个数字,做法如下

b := "https://www.codedesigner.net/exec/1079/1902"
re, _ := regexp.Compile(`\d+`)

    //查找符合正则的第一个
    all := re.FindAll([]byte(b),-1)
    for _,item := range all {
        fmt.Println(string(item))
    }