首页  >  文章  >  后端开发  >  如何在 Go 中捕获正则表达式中的多个引用参数?

如何在 Go 中捕获正则表达式中的多个引用参数?

DDD
DDD原创
2024-10-27 02:39:30781浏览

How to Capture Multiple Quoted Arguments in a Regular Expression in Go?

在 GO 中捕获重复组

你的正则表达式 ([A-Z] )(?: "([^"] )")*旨在捕获后跟零个或多个双引号参数的大写单词。但是,正如您所发现的,它仅捕获最后一个参数。

理解正则表达式

正则表达式由两个捕获组组成:

  1. ([A-Z] ):匹配大写单词。
  2. (?: "([^"] )")*:匹配双引号参数。 * 表示该组可以重复零次或多次。

出现问题的原因是第二个组包含在引用非捕获组的括号中。这意味着,虽然正则表达式匹配多个参数,但它仅将最后一个参数存储在结果变量中。

解决方案

要捕获所有参数,请将正则表达式修改为:

re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")+`)

通过将星号 * 替换为加号,第二组现在是捕获组。

示例代码

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")+`)
    results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)

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

游乐场

https://play.golang.org/p/8WmZ0yuHHzj

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

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