特定のパターンに従う文字列を扱う場合、繰り返しグループのキャプチャは一般的なタスクになることがあります。 Go では、正規表現はこの目的のための強力なツールです。
次の問題を考えてみましょう: 大文字の単語の後に二重引用符で囲まれた 0 個以上の引数が続く文字列を解析します。目標は、コマンド (大文字の単語) と引数 (引用符で囲まれた文字列) の両方を抽出することです。
よくある間違いは、
re1, _ := regexp.Compile(`([A-Z] )(?: "([^"] )")*`)
この正規表現は文字列の最後の引数のみをキャプチャします。複数の引数グループをキャプチャできるように式を変更します:
re1, _ := regexp.Compile(`([A-Z] )|(?: "([^"] )")`)
次に、コマンドと引数の両方を抽出するには、適切に変更された正規表現を使用して FindAllStringSubmatch 関数を使用します:
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])
}
正規表現の欠点に対処することで、Go コードで繰り返しグループを効果的にキャプチャできます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3