golang正则表达式regexp

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情

之前我们看了一下grep所代表的BREEREPCRE正则表达式,这次我们来看下golang regexp的正则表达式。

go regexp简介

regexp借鉴RE2语法,很多文章描述是采用了RE2,小弟认为,regexpre2其实是2个东西, 回过头来继续看regexpgolang regexp 除了\C之外,其正则表达式和Perl以及Python都是一样的,其语法规则和ERE大同小异,这里就不贴了。

关于regexp的更多文档: pkg.go.dev/regexp

go regexp小案例

匹配电话号码

我们假设从前端返回电话号码,后端在存储的时候,也需要做二次校验,格式为: 180-xxxx-xxxx,这个我们应该如何来校验呢?

按照上述格式标准,我们可以将正则设置写为:"[\d]{3}-[\d]{4}-[\d]{4}" ,我们来看下具体程序。

package main

import (
	"fmt"
	"regexp"
)

func main() {

	testString := []string{"180-1234-5678","179-123-45678","1234-123-3431"}

	for _,v := range testString {
		fmt.Println("正在处理: " ,v)

		re := "[\d]{3}-[\d]{4}-[\d]{4}"

		fmt.Println(regexp.MatchString(re,v))
	}
}

如上代码是我们测试了3组数据,分别是180-1234-5678179-123-456781234-123-3431 ,我们通过肉眼判断只有第一个是符合规则的,我们来运行代码看下呢

匹配以某结尾的字符

例如我们想匹配以hello开头的字符且以world结尾的字符,应该如何写呢?

匹配规则可以这样写: re := "hello(.*)world"

运行后效果如下

匹配email地址

例如有需求,需要匹配前端传入的email地址做二次校验,规则是以 yyy@xxx.com的格式,其中yyy最短为6位,最长为16位,只能是字母或者数字,xxx为三位字母。

我们可以将其规则写为: re := "[\w]{6,16}@[a-zA-Z]{3}.com"

我们运行程序后效果为

那么,最后,有这样一个问题: 若有这样一个需求,需要校验前端传入的密码复杂度,其规则为: 长度大于等于16位, 需要同时包含a-zA-Z0-9以及特殊字符 !@#$%其中至少一个即可,你会写这个正则表达式了么?反正我没写出来。

总结

如果你看了,上一篇文章grep正则表达式案例,你会不会对此规则感觉很熟悉呢? 快来动手试试吧。

posted @ 2022-08-10 00:11  pdudos  阅读(0)  评论(0编辑  收藏  举报  来源