首頁  >  文章  >  後端開發  >  如何在 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/8WmZ0yuHHz

以上是如何在 Go 中擷取正規表示式中的多個參考參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn