Go语言的正则表达式
Go语言的正则表达式正则表达式基础正则表达式是一种用于匹配字符串中字符组合的模式。在Go语言中正则表达式由regexp包提供支持。基本使用创建正则表达式使用regexp.Compile函数创建正则表达式package main import ( fmt regexp ) func main() { r, err : regexp.Compile(ab) if err ! nil { fmt.Println(Error compiling regex:, err) return } fmt.Println(Regex compiled successfully) }匹配字符串使用MatchString方法检查字符串是否匹配正则表达式package main import ( fmt regexp ) func main() { r, _ : regexp.Compile(ab) fmt.Println(r.MatchString(ab)) // true fmt.Println(r.MatchString(abb)) // true fmt.Println(r.MatchString(a)) // false fmt.Println(r.MatchString(abc)) // true }常用方法FindString查找第一个匹配的字符串package main import ( fmt regexp ) func main() { r, _ : regexp.Compile(ab) fmt.Println(r.FindString(xabby)) // ab }FindStringSubmatch查找第一个匹配的字符串及其子匹配package main import ( fmt regexp ) func main() { r, _ : regexp.Compile(a(b)) fmt.Println(r.FindStringSubmatch(xabby)) // [abb bb] }FindAllString查找所有匹配的字符串package main import ( fmt regexp ) func main() { r, _ : regexp.Compile(ab) fmt.Println(r.FindAllString(abbbcab, -1)) // [abbb ab] }正则表达式语法Go语言的正则表达式语法与Perl兼容主要包括.匹配任意字符除了换行符*匹配前面的表达式0次或多次匹配前面的表达式1次或多次?匹配前面的表达式0次或1次^匹配字符串的开始$匹配字符串的结束[]匹配方括号内的任意一个字符()捕获分组示例邮箱验证package main import ( fmt regexp ) func main() { emailRegex : regexp.MustCompile(^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$) emails : []string{ userexample.com, invalid-email, user.nameexample.co.uk, } for _, email : range emails { fmt.Printf(%s: %t\n, email, emailRegex.MatchString(email)) } }示例URL提取package main import ( fmt regexp ) func main() { urlRegex : regexp.MustCompile(https?://[\w\-_](\.[\w\-_])([\w\-\.,?^%:/~\#]*[\w\-\?^%/~\#])?) text : Visit https://golang.org and http://example.com for more information. urls : urlRegex.FindAllString(text, -1) fmt.Println(urls) // [https://golang.org http://example.com] }性能优化使用regexp.MustCompile预编译正则表达式避免重复编译对于简单的字符串操作考虑使用strings包而不是正则表达式对于复杂的正则表达式考虑使用更具体的模式以提高性能总结正则表达式是处理字符串的强大工具Go语言的regexp包提供了全面的支持。通过合理使用正则表达式可以简化字符串处理逻辑提高代码的可读性和维护性。