在 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>
现在可以成功捕获所有参数。此修订后的正则表达式更加通用,可适应输入格式的变化,其中命令和参数可能以不同的顺序出现。
以上是如何在 Go 中捕获多个引用组:正则表达式解决方案的详细内容。更多信息请关注PHP中文网其他相关文章!