定义正则表达式
大海捞针,程序清单如下:
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