Go语言的正则表达式简介


Go语言中标准库内用于正则表达式处理的包是regexp,其中提供了使用正则表达式各项功能所必需的函数。

定义正则表达式

大海捞针,程序清单如下:

package main
 
import (
    "fmt"
    "log"
    "regexp"
)
func main() {
    needle:="chocolate"
    haystack:="Chocolate is my favorite!"
    match, err:=regexp.MatchString(needle,haystack)
    if err!=nil{
        log.Fatal(err)
    }
    fmt.Println(match)
}
正则表达式区分大小写。

运行结果如下:

false
如果以不区分大小写的方式查找,必须修改正则表达式,按照上面程序清单修改如下:

needle:="(?i)chocolate"
熟悉正则表达式语法

常用的正则表达式语法
字符    含义
.    以除换行符之前的其他任何字符都匹配
*    与零个或多个指定的字符匹配
^    表示行首
$    表示行尾
+    匹配一次或多次
?    匹配零或一次
[ ]    与方括号内指定的任何字符都匹配
{n}    匹配n次
{n,}    匹配n次或更多次
{m,n}    最少匹配m次,最多匹配n次
^[a-zA-Z0-9]{5-12}$

字符^表示从字符串开头开始匹配。

方括号([ ])内的字符集表示与其中的任何字符都匹配。

大括号({})内的数字表示应至少匹配5次,但最多不超过12次。

使用正则表达式验证数据

Compile:在正则表达式未能通过编译时返回错误。

MustCompile:在正则表达式无法编译时引发panic。

使用正则表达式验证数据,程序清单如下:

package main
 
import (
    "fmt"
    "regexp"
)
func main() {
    re:=regexp.MustCompile("^[a-zA-Z0-9]{5,12}")
    fmt.Println(re.MatchString("slimshady99"))
    fmt.Println(re.MatchString("!asdf£33£3"))
    fmt.Println(re.MatchString("roger"))
    fmt.Println(re.MatchString("iamthebestuseofthisappevaaaar"))
}
运行结果如下:

true
false
true
true
使用正则表达式来变换数据:

用户名规则:包含的字符不能超过12个。

使用正则表达式来变换数据,程序清单如下:

package main
 
import (
    "fmt"
    "regexp"
)
func main() {
    usernames:=[4]string{
        "slimshady99",
        "!asdf£33£3",
        "roger",
        "Iamthebestuseofthisappevaaaar",
    }
    re:=regexp.MustCompile("^[a-zA-Z0-9]{5,12}")
    an:=regexp.MustCompile("[[:^alnum:]]")
    for _,username:=range usernames{
        if len(username)>12{
            username=username[:12]
            fmt.Printf("trimmed username to %v\n",username)
        }
        if !re.MatchString(username){
            username=an.ReplaceAllString(username,"x")
            fmt.Printf("rewrote username to %v\n",username)
        }
    }
}
运行结果如下:

rewrote username to xasdfx33x3
trimmed username to Iamthebestus
用正则表达式判断字符串是否含有符合一定规则的字串

代码如下:

package main
 
import (
    "regexp"
    t "tools"
)
 
func main() {
    patternT := "太*高兴"
    s1 := "她真的太太太太太高兴了!"
    matched, errT := regexp.MatchString(patternT, s1)
    if errT != nil {
        t.Printfln("正则表达式匹配时发生错误:%v", errT.Error())
    }
    if matched {
        t.Printfln("字符串%#v中包含符合正则各地怕啊%#v的字串。", s1, patternT)
    } else {
        t.Printfln("字符串%#v中不包含符合正则各地怕啊%#v的字串。", s1, patternT)
    }
}
运行结果如下:

[Running] go run "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\Go\main.go"
字符串"她真的太太太太太高兴了!"中包含符合正则各地怕啊"太*高兴"的字串。
 
[Done] exited with code=0 in 19.36 seconds
regexp包中的MatchString函数用于在字符串中查找是否包含符合某个正则表达式的字串,它的定义是:

func MatchString(pattern string, s string) (matched bool, err error)

它接受两个参数,其中pattern是正则表达式,s是要查找子串的字符串;返回两个返回值,其中布尔型变量matched代表是否找到了匹配的字符串,err用于函数处理出错后返回错误信息。
————————————————
版权声明:本文为CSDN博主「DXB2021」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/DXB2021/article/details/122719108

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值