Go での複数のグループのキャプチャ: ケーススタディ
大文字の単語の後にオプションの二重引用符で囲まれた引数が続く文字列を解析する場合、個々のグループを分離する挑戦的になる可能性があります。一般的なアプローチの 1 つは、次のコード スニペットに示されているように、正規表現を使用することです:
<code class="go">re1, _ := regexp.Compile(`([A-Z]+)(?: "([^"]+)")*`) results := re1.FindAllStringSubmatch(input, -1)</code>
ただし、複数の引数が存在する場合、最後の引数のみがキャプチャされるため、問題が発生する可能性があります。これを解決するには、より柔軟な正規表現が必要です。
拡張正規表現
グループ化の制約を緩和することで、コマンドと引数の両方を効果的にキャプチャできます。
re1, _ := regexp.Compile(`([A-Z]+)|(?: "([^"]+)")`)
この改訂された正規表現では:
抽出と表示
グループがキャプチャされたら、抽出できます。コマンドと引数を個別に表示します:
fmt.Println("Command:", results[0][1]) for _, arg := range results[1:] { fmt.Println("Arg:", arg[2]) }
このアプローチにより、明確に定義されたコマンド構造を使用して文字列を効率的に解析できます。
以上が正規表現を使用して Go で複数の引数をキャプチャする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。