企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
> 本章介绍正则表达式,使用这种模式可以实现对文本内容 校验、解析、替换 [TOC] # 获取解析对象 > 可通过Compile() 和 MushCompile()来获取到解析对象,并进行下一步的正则匹配 ## Compile() > 返回 Regexp 对象以及是否错误信息 ~~~ text := `wang666` // 如果解析出错,则会panic re, err := regexp.Compile(`[a-z]+`) if err != nil { return } match := re.FindString(text) fmt.Println(match) ~~~ ## MustCompile() > 返回 Regexp,解析表达式失败则会panic ~~~ text := `wang666` // 如果解析出错,则会panic re := regexp.MustCompile(`[a-z]+`) match := re.FindString(text) fmt.Println(match) ~~~ # 校验是否匹配 ~~~ text := `111@qq.com` re := regexp.MustCompile(`^(\w+)@(\w+)\.(\w{3,5})$`) result := re.MatchString(text) if result == true{ fmt.Println("available") }else { fmt.Println("unavailable") } ~~~ # 查找匹配内容 ## 正则匹配单个值 ### FindString() 匹配单个值 > 如果没有匹配的话,返回 空字符串 ~~~ text := `my email is 111@qq.com` re := regexp.MustCompile(`\w+@\w+\.\w{3,5}$`) match := re.FindString(text) fmt.Println(match) ~~~ > 运行结果 ~~~ 111@qq.com ~~~ ### FindStringSubmatch() 提取分组内容 > 就是提取正则表达式括号里的内容,如果没有匹配的话,返回 nil ~~~ text := `my email is 111@qq.com` re := regexp.MustCompile(`(\w+)@(\w+)\.(\w{3,5})$`) match := re.FindStringSubmatch(text) fmt.Println(match) fmt.Println("--------------------") fmt.Printf("value %v , name=%v\n", match, match[1]) ~~~ > 运行结果 ~~~ value [111@qq.com 111 qq com] , name=111 ~~~ ## 正则匹配多个值 ### FindAllString() 匹配多值 > 如果没有匹配的话,返回 nil ~~~ text := `my email is 111@qq.com my email2 is 222@qq.com` re := regexp.MustCompile(`\w+@\w+\.\w{3,5}`) matches := re.FindAllString(text, -1) fmt.Println(matches) fmt.Println("--------------------") for _, value := range matches { fmt.Println(value) } ~~~ > 运行结果 ~~~ [111@qq.com 222@qq.com] -------------------- 111@qq.com 222@qq.com ~~~ ### FindAllStringSubmatch() 提取分组内容 > 就是提取正则表达式括号里的内容,如果没有匹配的话,返回 nil ~~~ text := `my email is 111@qq.com my email2 is 222@qq.com` re := regexp.MustCompile(`(\w+)@(\w+)\.(\w{3,5})`) matches := re.FindAllStringSubmatch(text, -1) fmt.Println(matches) fmt.Println("--------------------") for _, value := range matches { fmt.Printf("value %v , name=%v\n", value, value[1]) } ~~~ > 运行结果 ~~~ [[111@qq.com 111 qq com] [222@qq.com 222 qq com]] -------------------- value [111@qq.com 111 qq com] , name=111 value [222@qq.com 222 qq com] , name=222 ~~~ # 替换内容 > 使用ReplaceAllString() 进行全文本替换 ~~~ text := `my email is 111@qq.com my email2 is 222@qq.com` re := regexp.MustCompile(`\w+@\w+\.\w{3,5}`) newstr := re.ReplaceAllString(text, "***") // 还可以只替换分组部分,如下 //newstr := re.ReplaceAllString(text, `***@$2.$3`) fmt.Println(newstr) ~~~ > 运行结果 ~~~ my email is *** my email2 is *** ~~~ > 使用ReplaceAllStringFunc() 进行全文本替换 ~~~ text := `my email is 111@qq.com my email2 is 222@qq.com` re := regexp.MustCompile(`(\w+)@(\w+)\.(\w{3,5})`) newstr := re.ReplaceAllStringFunc(text, func(s string) string { str := s if s == "111@qq.com" { str = "[data is encrypted]" } return str }) fmt.Println(newstr) ~~~ > 运行结果 ~~~ my email is [data is encrypted] my email2 is 222@qq.com ~~~