使用遵循特定模式的字符串时,捕获重复组可能是一项常见任务。在 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>
此正则表达式捕获组是:
最后,迭代结果并将命令与参数分开:
<code class="go">fmt.Println("Command:", results[0][1]) for _, arg := range results[1:] { fmt.Println("Arg:", arg[2]) }</code>
通过解决正则表达式的缺点,您可以有效地捕获 Go 代码中的重复组。
以上是如何在 Go 中捕获正则表达式中的多个重复组?的详细内容。更多信息请关注PHP中文网其他相关文章!