首页  >  文章  >  后端开发  >  如何在 Go 中捕获多个引用组:正则表达式解决方案

如何在 Go 中捕获多个引用组:正则表达式解决方案

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-26 00:53:28820浏览

How to Capture Multiple Quoted Groups in Go: A Regex Solution

在 Go 中捕获多个引用组

本文解决了解析遵循特定格式的字符串的挑战:大写命令后跟可选引用的论点。目标是将命令和参数提取为单独的字符串。

为了处理此任务,使用正则表达式: re1, _ := regexp.Compile(([A-Z] )(?: " (1)")*)。第一个捕获组 ([A-Z] ) 匹配大写命令,而第二个捕获组 (?: "([^"] )")* 匹配零个或多个带引号的参数。

但是,提供的代码仅捕获最后一个参数。要解决此问题,建议使用更宽松的正则表达式: re1, _ := regexp.Compile(([A-Z] )|(?: "(1 )"))。此正则表达式使用联合 | 来允许命令或参数。

通过将代码修改为:

<code class="go">re1, _ := regexp.Compile(`([A-Z]+)|(?: "([^"]+)")`)
results := re1.FindAllStringSubmatch(`COMMAND "arg1" "arg2" "arg3"`, -1)

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

现在可以成功捕获所有参数。此修订后的正则表达式更加通用,可适应输入格式的变化,其中命令和参数可能以不同的顺序出现。


  1. "

以上是如何在 Go 中捕获多个引用组:正则表达式解决方案的详细内容。更多信息请关注PHP中文网其他相关文章!

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