Techioz Blog

Ruby - 正規表現キャプチャグループを抽出する最良の方法?

概要

正規表現グループ マッチングの質問を読んでいたところ、正規表現からキャプチャ グループを参照するには 2 つの方法があることがわかりました。

どちらが良いでしょうか? 1) の場合、安全のため、nil を防ぐために if ステートメントを使用する必要があるため、情報を抽出するだけではどうでしょうか? 2 番目のステップの代わりに、文字列キャプチャ メソッドを呼び出します。したがって、オプション 2) の方が私にとっては便利に思えます。

解決策

v2.4.6 以降、Ruby にはnamed_captures があり、このように使用できます。 ? 構文をキャプチャ グループ内に追加するだけです。

/(\w)(\w)/.match("ab").captures # => ["a", "b"]
/(\w)(\w)/.match("ab").named_captures # => {}

/(?<some_name>\w)(\w)/.match("ab").captures # => ["a"]
/(?<some_name>\w)(\w)/.match("ab").named_captures # => {"some_name"=>"a"}

さらに関連性の高いのは、名前付きキャプチャを名前で参照できることです。

result = /(?<some_name>\w)(\w)/.match("ab")
result["some_name"] # => "a"