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