Go 的 regexp 包功能完整、线程安全,支持匹配、提取(含命名分组)、全局查找(含迭代器)和替换,但不支持 PCRE 全部特性;推荐预编译正则以提升性能。

在 Go 语言中,regexp 包是处理正则表达式的标准库,功能完整、性能良好,且线程安全。它不支持 PCRE 的全部特性(比如回溯引用、条件断言),但覆盖了绝大多数日常匹配、提取、替换需求。
最常用的是判断字符串是否匹配某个正则模式:
regexp.MatchString(pattern, s) 快速判断,返回 bool 和可能的错误(pattern 不合法时)re := regexp.MustCompile(`\d{3}-\d{4}`),再调用 re.MatchString(s)
MustCompile 在 pattern 错误时 panic,适合写死的正则;运行时生成的 pattern 应用 Compile 并检查 error匹配后提取子串,推荐用命名分组提升可读性:
`(?P<year>\d{4})-(?P<month>\d{2})`</month></year>,然后用 re.FindStringSubmatchMap(s)(Go 1.22+)直接返回 map[string]string
re.FindStringSubmatchIndex(s) 获取字节位置,再手动切片;或用 re.FindStringSubmatch(s) 得到整个匹配及各组原始字节re.FindStringSubmatch(s) 返回 []byte 切片数组,索引 0 是全匹配,1 是第一组,依此类推对一段文本找所有匹配项,避免一次性加载大量结果:
立即学习“go语言免费学习笔记(深入)”;
re.FindAllString(s, -1) 返回所有匹配字符串的 []string;传数字可限制数量re.FindAllStringSubmatch(s, -1) 返回 [][]byte,适合含二进制或非 UTF-8 数据的场景re.FindIter(s)(Go 1.22+),返回迭代器,可 range 遍历每个 *RegexpMatch
替换支持字面量和函数式逻辑:
re.ReplaceAllString(s, "new") 简单字面替换re.ReplaceAllStringFunc(s, func(m string) string { return strings.ToUpper(m) }) 对每个匹配调用函数re.ReplaceAllString(s, "[$1:$2]"),其中 $1 表示第一个捕获组(注意:Go 不支持 \1,只认 $1)re.ReplaceAllStringFunc + 手动 FindStringSubmatch 更灵活基本上就这些。Go 的 regexp 设计克制,没有过度封装,学完核心几个方法就能覆盖 95% 场景。注意别在循环里反复 Compile,提前编译复用更高效。
以上就是如何在Golang中使用regexp进行正则匹配_Golang regexp正则表达式操作方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号