定义正则表达式
大海捞针,程序清单如下:
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.Println("trimmed username to %v\n",username)
		}
		if !re.MatchString(username){
			username=an.ReplaceAllString(username,"x")
			fmt.Println("rewrote username to %v\n",username)
		}
	}
}运行结果如下:(不对了,不知道怎么改)
rewrote username to %v
 xasdfx33x3
trimmed username to %v
 Iamthebestus









