ホームページ >バックエンド開発 >Golang >Go の正規表現で複数の引用符で囲まれた引数をキャプチャする方法は?

Go の正規表現で複数の引用符で囲まれた引数をキャプチャする方法は?

DDD
DDDオリジナル
2024-10-27 02:39:30863ブラウズ

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

GO で繰り返されるグループをキャプチャする

正規表現 ([A-Z] )(?: "([^"] )")*は、大文字の単語とそれに続く 0 個以上の二重引用符で囲まれた引数をキャプチャするように設計されています。ただし、おわかりのように、最後の引数のみがキャプチャされます。

正規表現について

正規表現は 2 つのキャプチャ グループで構成されます:

  1. ([A-Z] ): 大文字の単語と一致します。
  2. (?: "([^"] )")*: 一致します。二重引用符で囲まれた引数。 * は、このグループが 0 回以上繰り返すことができることを示します。

この問題は、2 番目のグループが非キャプチャ グループを参照するかっこで囲まれているために発生します。つまり、正規表現は複数の引数に一致しますが、結果変数には最後の引数のみが保存されます。

Solution

すべての引数を取得するには、正規表現を次のように変更します。

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

アスタリスク * をプラスに置き換えることにより、2 番目のグループがキャプチャ グループになります。

サンプル コード

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。