首页 > 后端开发 > Golang > 如何高效地查找 Go 字符串中的所有正则表达式匹配项?

如何高效地查找 Go 字符串中的所有正则表达式匹配项?

Barbara Streisand
发布: 2024-12-21 09:32:21
原创
462 人浏览过

How to Efficiently Find All Regex Matches in a Go String?

在 Go 中使用正则表达式查找匹配

使用 Go 时,您可能会遇到需要使用正则表达式来匹配字符串中的特定模式。以下是如何使用 regexp 包来完成此操作:

问题:

如何找到给定字符串中指定正则表达式的所有匹配项并将它们作为数组?

示例:

考虑字符串:“{city},{state} {zip}”。目标是返回一个包含大括号括起来的所有子字符串的数组。

初始尝试:

使用 regexp 包,您可能已经尝试过以下代码:

r := regexp.MustCompile("/({[^}]*})/")
matches := r.FindAllString("{city}, {state} {zip}", -1)
登录后复制

但是,此代码返回一个空切片,表明没有匹配项找到。

解决方案:

要解决此问题,请考虑以下步骤:

  1. 删除不必要的正则表达式分隔符(例如 /) .
  2. 使用原始字符串文字来定义正则表达式模式,这允许您转义带有单个反斜杠的元字符。
  3. 从正则表达式模式中删除捕获组以获取不带大括号的整个匹配字符串。

对于所有匹配:

r := regexp.MustCompile(`{[^{}]*}`)
matches := r.FindAllString("{city}, {state} {zip}", -1)
fmt.Println(matches) // Prints: [{city}, {state}, {zip}]
登录后复制

对于捕获的零件仅:

r := regexp.MustCompile(`{([^{}]*)}`)
matches := r.FindAllStringSubmatch("{city}, {state} {zip}", -1)
for _, v := range matches {
    fmt.Println(v[1]) // Prints: city, state, zip
}
登录后复制

以上是如何高效地查找 Go 字符串中的所有正则表达式匹配项?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板