Go xmas2020 学习笔记 13、Regular Expressions
作者:互联网
课程地址 go-class-slides/xmas-2020 at trunk · matt4biz/go-class-slides (github.com)
主讲老师 Matt Holiday
正则表达式参考资料
Syntax · google/re2 Wiki (github.com)
13-Regular Expressions
Simple string searches
func main() {
test := "Here is $1 which is $2!"
test = strings.ReplaceAll(test, "$1", "honey")
test = strings.ReplaceAll(test, "$2", "tasty")
fmt.Println(test)
}
Here is honey which is tasty!
使用 \(strings\) 包进行简单搜索,对于复杂搜索和验证,谨慎使用 \(regexp\) 。
Location by regex
func main() {
te := "aba abba abbba"
re := regexp.MustCompile(`b+`)
mm := re.FindAllString(te, -1)
id := re.FindAllStringIndex(te, -1)
fmt.Println(mm)
fmt.Println(id)
for _, d := range id {
fmt.Println(te[d[0]:d[1]])
}
up := re.ReplaceAllStringFunc(te, strings.ToUpper)
fmt.Println(up)
}
[b bb bbb]
[[1 2] [5 7] [10 13]]
b
bb
bbb
aBa aBBa aBBBa
FindAllString(te, -1)
返回匹配的字符串切片。
FindAllStringIndex(te, -1)
返回匹配的字符串位置,是切片的切片。
UUID validation
var uu = regexp.MustCompile(`^[[:xdigit:]]{8}-[[:xdigit:]]{4}-[1-5][[:xdigit:]]{3}-[89abAB][[:xdigit:]]{3}-[[:xdigit:]]{12}$`)
var test = []string{
"072664ee-a034-4cc3-a2e8-9f1822c43bbb",
"072664ee-a034-4cc3-a2e8-9f1822c43bbbb", // ^ 如果不加 ^ $ 匹配了前面的且忽略了后面的b
"072664ee-a034-6cc3-a2e8-9f1822c43bbbb",
"072664ee-a034-4cc3-C2e8-9f1822c43bbb",
}
func main() {
for i, t := range test {
if !uu.MatchString(t) {
fmt.Println(i, t, "\tfails")
}
}
}
1 072664ee-a034-4cc3-a2e8-9f1822c43bbbb fails
2 072664ee-a034-6cc3-a2e8-9f1822c43bbbb fails
3 072664ee-a034-4cc3-C2e8-9f1822c43bbb fails
Capture groups
var ph = regexp.MustCompile(`\(([[:digit:]]{3})\) ([[:digit:]]{3})-([[:digit:]]{4})`)
func main() {
orig := "(214) 514-9548"
match := ph.FindStringSubmatch(orig)
fmt.Printf("%q\n", match)
if len(match) > 3 {
fmt.Printf("+1 %s-%s-%s\n", match[1], match[2], match[3])
}
}
["(214) 514-9548" "214" "514" "9548"]
+1 214-514-9548
URL re
(?::([0-9]+))? 末尾的问号确定圆括号内的内容可以出现零次或一次。
?: 表示不被捕获,即整个括号内容匹配了也不添加到返回的切片里。
但内部又有一个捕获组 ([0-9]+) 匹配出现一次或多次的数字,将被捕获到字符串放入返回的切片中。
所以 :([0-9]+) 这一整个不会出现在切片中,而 ([0-9]+) 会出现在切片中。
FindStringSubmatch
只会匹配最后一个,使用FindAllStringSubmatch
返回全部匹配,切片的切片。
标签:13,fmt,a034,切片,xmas2020,Regular,072664ee,test,te 来源: https://www.cnblogs.com/linxiaoxu/p/16129452.html