Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

名前付きキャプチャを使って、正規表現の結果をHash気分で扱う

Rubyにはperlと同様、名前付きキャプチャがあります。

キャプチャ

(?pat)もしくは(?'name'pat)で書き下します。

"ブリドカットセーラ 恵美".match(/(?<family_name>\S+)[ |\s]+(?<given_name>\S+)/)
#=> #<MatchData "ブリドカットセーラ 恵美" family_name:"ブリドカットセーラ" given_name:"恵美">

"上坂   すみれ".match(/(?<family_name>\S+)[ |\s]+(?<given_name>\S+)/)
#=> #<MatchData "上坂   すみれ" family_name:"上坂" given_name:"すみれ">

呼び出し

hashと同じ感じです。

 "上坂   すみれ".match(/(?<family_name>\S+)[ |\s]+(?<given_name>\S+)/).tap {|i| puts "同志" << i[:family_name] }
m = "上坂   すみれ".match(/(?<family_name>\S+)[ |\s]+(?<given_name>\S+)/)
#=> #<MatchData "上坂   すみれ" family_name:"上坂" given_name:"すみれ">

m[:family_name]
#=> "上坂"

参考もと