「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go の正規表現で複数の繰り返しグループをキャプチャするにはどうすればよいですか?

Go の正規表現で複数の繰り返しグループをキャプチャするにはどうすればよいですか?

2024 年 11 月 2 日に公開
ブラウズ:107

How to Capture Multiple Repeating Groups in Regular Expressions in Go?

Go での繰り返しグループのキャプチャ

特定のパターンに従う文字列を扱う場合、繰り返しグループのキャプチャは一般的なタスクになることがあります。 Go では、正規表現はこの目的のための強力なツールです。

次の問題を考えてみましょう: 大文字の単語の後に二重引用符で囲まれた 0 個以上の引数が続く文字列を解析します。目標は、コマンド (大文字の単語) と引数 (引用符で囲まれた文字列) の両方を抽出することです。

正規表現の落とし穴

よくある間違いは、

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

この正規表現は文字列の最後の引数のみをキャプチャします。複数の引数グループをキャプチャできるように式を変更します:

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

コマンドと引数のキャプチャ

次に、コマンドと引数の両方を抽出するには、適切に変更された正規表現を使用して FindAllStringSubmatch 関数を使用します:

results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)

この正規表現キャプチャ グループは次のとおりです:

  • グループ 1:コマンド (大文字)
  • グループ 2: 各引数 (二重引用符で囲まれた文字列)

結果の反復

最後に反復します結果を重ねてコマンドを引数から分離します:

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

正規表現の欠点に対処することで、Go コードで繰り返しグループを効果的にキャプチャできます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3