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

DDD
リリース: 2024-10-27 02:39:30
オリジナル
793 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!