在 Go 中捕获多个组:案例研究
解析包含大写单词后跟可选双引号参数的字符串时,隔离各个组可能具有挑战性。一种常见的方法涉及使用正则表达式,如以下代码片段所示:
<code class="go">re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")*`) results := re1.FindAllStringSubmatch(input, -1)</code>
但是,当存在多个参数时可能会出现问题,因为仅捕获最后一个参数。为了解决这个问题,需要一个更灵活的正则表达式。
增强正则表达式
通过放宽分组约束,我们可以有效地捕获命令和参数:
re1, _ := regexp.Compile(`([A-Z]+)|(?: "([^"]+)")`)
在此修订后的正则表达式中:
提取和显示
捕获组后,我们可以提取并分别显示命令和参数:
fmt.Println("Command:", results[0][1]) for _, arg := range results[1:] { fmt.Println("Arg:", arg[2]) }
这种方法可以有效地解析具有明确定义的命令结构的字符串。
以上是如何使用正则表达式捕获 Go 中的多个参数?的详细内容。更多信息请关注PHP中文网其他相关文章!