golang正则表达式简单应用

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

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

验证

在进行验证这个url的时候,可以使用如下的pattern
^(\w+):\/\/([^/:]+)\/([^/:]+)\/(\d*)?\/(\d*)$,该字符串使用``圈起来
其中含义如下:

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

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

[^]表示负字符范围,即排除方括号中的字符,([^/:]+) 即表示排除:和/之外,匹配多个字符
上述([^/:]+)\/([^/:]+)\/即匹配到了
www.codedesigner.net/exec/

\d为匹配数字,*表示匹配前面的子表达式零次或多次
(\d*)? 即是匹配一个或多个数字,?表示匹配前面的子表达式零次或一次
上述(\d*)?\/(\d*)即匹配到了
1079/1092

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))
    }

你可能感兴趣的:(golang正则表达式简单应用)