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用于函数处理出错后返回错误信息。