首页 >后端开发 >Golang >如何在 Go 中捕获正则表达式中的多个重复组?

如何在 Go 中捕获正则表达式中的多个重复组?

Barbara Streisand
Barbara Streisand原创
2024-10-29 06:29:02851浏览

How to Capture Multiple Repeating Groups in Regular Expressions in Go?

在 Go 中捕获重复组

使用遵循特定模式的字符串时,捕获重复组可能是一项常见任务。在 Go 中,正则表达式是实现此目的的强大工具。

考虑以下问题:解析由大写单词后跟零个或多个用双引号引起来的参数组成的字符串。目标是提取命令(大写单词)和参数(带引号的字符串)。

正则表达式陷阱

常见的错误是使用如下正则表达式:

<code class="go">re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")*`)</code>

此正则表达式仅捕获字符串中的最后一个参数。修改表达式以允许捕获多组参数:

<code class="go">re1, _ := regexp.Compile(`([A-Z]+)|(?: "([^"]+)")`)</code>

捕获命令和参数

现在,要提取命令和参数,请使用 FindAllStringSubmatch 函数和经过适当修改的正则表达式:

<code class="go">results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)</code>

此正则表达式捕获组是:

  • 组 1: 命令(大写单词)
  • 第 2 组: 每个参数(双引号字符串)

迭代结果

最后,迭代结果并将命令与参数分开:

<code class="go">fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
    fmt.Println("Arg:", arg[2])
}</code>

通过解决正则表达式的缺点,您可以有效地捕获 Go 代码中的重复组。

以上是如何在 Go 中捕获正则表达式中的多个重复组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn