特定のパターンに従う文字列を扱う場合、繰り返しグループのキャプチャは一般的なタスクになることがあります。 Go では、正規表現はこの目的に強力なツールです。
次の問題を考えてみましょう: 大文字の単語の後に二重引用符で囲まれた 0 個以上の引数が続く文字列を解析します。目標は、コマンド (大文字の単語) と引数 (引用符で囲まれた文字列) の両方を抽出することです。
よくある間違いは、次のような正規表現を使用することです。
<code class="go">re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")*`)</code>
この正規表現は、文字列の最後の引数のみをキャプチャします。引数の複数のグループをキャプチャできるように式を変更します。
<code class="go">re1, _ := regexp.Compile(`([A-Z]+)|(?: "([^"]+)")`)</code>
ここで、コマンドと引数の両方を抽出するには、適切に変更された正規表現を使用して FindAllStringSubmatch 関数を使用します。式:
<code class="go">results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)</code>
この正規表現キャプチャ グループは次のとおりです:
最後に、結果を反復してコマンドを引数から分離します:
<code class="go">fmt.Println("Command:", results[0][1]) for _, arg := range results[1:] { fmt.Println("Arg:", arg[2]) }</code>
正規表現の欠点に対処することで、Go コードで繰り返しグループを効果的にキャプチャできます。
以上がGo の正規表現で複数の繰り返しグループをキャプチャするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。