ホームページ > バックエンド開発 > Golang > Go の正規表現で複数の繰り返しグループをキャプチャするにはどうすればよいですか?

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

Barbara Streisand
リリース: 2024-10-29 06:29:02
オリジナル
897 人が閲覧しました

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

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

特定のパターンに従う文字列を扱う場合、繰り返しグループのキャプチャは一般的なタスクになることがあります。 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>
ログイン後にコピー

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

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

結果の反復

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

<code class="go">fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
    fmt.Println("Arg:", arg[2])
}</code>
ログイン後にコピー

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

以上がGo の正規表現で複数の繰り返しグループをキャプチャするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート