Go语言中通过regexp包支持正则表达式,用于字符串匹配、查找和替换。首先导入”regexp”包,常用方法包括MatchString验证格式、FindAllString提取内容、ReplaceAllString替换文本。例如:使用^[w._%+-]+@[w.-]+.[a-zA-Z]{2,}$验证邮箱;用1[3456789]d{9}提取手机号;合并空格或隐藏身份证部分数字实现敏感信息处理。为提升性能,应预编译正则表达式,如使用regexp.MustCompile创建全局变量。注意使用^和$控制边界,避免误匹配。核心是掌握基本语法与方法调用,合理设计正则模式以应对常见文本处理需求。

Go语言中的regexp包提供了对正则表达式的基本支持,适合处理字符串匹配、查找、替换等常见任务。使用前需导入"regexp"包。下面通过几个典型场景展示如何在实际开发中使用正则表达式。
验证邮箱格式
判断输入是否为合法邮箱是常见需求。可以定义一个较为通用的邮箱正则模式:
^[w._%+-]+@[w.-]+.[a-zA-Z]{2,}$
说明:
^[w._%+-]+:匹配用户名部分,允许字母、数字及常见符号 @:字面量 @ 符号 [w.-]+:域名主体 .:转义点号 [a-zA-Z]{2,}$:顶级域名至少两个字母
示例代码:
立即学习“go语言免费学习笔记(深入)”;
package mainimport ( "fmt" "regexp")func isValidEmail(email string) bool { pattern := `^[w._%+-]+@[w.-]+.[a-zA-Z]{2,}$` re := regexp.MustCompile(pattern) return re.MatchString(email)}func main() { fmt.Println(isValidEmail("user@example.com")) // true fmt.Println(isValidEmail("invalid.email")) // false}
提取文本中的手机号
中国大陆手机号通常以1开头,共11位。可使用如下正则提取所有匹配号码:
1[3456789]d{9}
说明:匹配以1开头,第二位为3-9之间的数字,后跟9位数字。
Shakker
多功能AI图像生成和编辑平台
103 查看详情
使用FindAllString方法获取全部结果:
func extractPhoneNumbers(text string) []string { re := regexp.MustCompile(`1[3456789]d{9}`) return re.FindAllString(text, -1)}// 示例numbers := extractPhoneNumbers("联系方式:13812345678和15987654321")fmt.Println(numbers) // [13812345678 15987654321]
替换敏感词或格式化内容
正则可用于内容过滤或结构调整。比如将多个空格合并为单个空格:
func normalizeSpaces(s string) string { re := regexp.MustCompile(`s+`) return re.ReplaceAllString(s, " ")}
另一个例子:隐藏身份证中间几位
func hideIDCard(id string) string { re := regexp.MustCompile(`(d{3})d{8}(d{4})`) return re.ReplaceAllString(id, "${1}********${2}")}// 输入:110105199003076543 → 输出:110********6543
编译正则提升性能
若正则会被多次使用,建议预先编译。使用MustCompile或Compile创建*Regexp对象,避免重复解析:
var emailRegex = regexp.MustCompile(`^[w._%+-]+@[w.-]+.[a-zA-Z]{2,}$`)func validate(email string) bool { return emailRegex.MatchString(email)}
注意:MustCompile会在正则错误时panic,适合用于常量模式;Compile返回error,适合动态构建的正则。
基本上就这些。掌握MatchString、FindAllString、ReplaceAllString这几个核心方法,配合合理的正则表达式,就能应对大多数文本处理场景。不复杂但容易忽略的是预编译和边界控制(如加^和$)。
以上就是Golang regexp正则表达式匹配实践的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1134111.html
微信扫一扫
支付宝扫一扫