Ruby 1.9 regex (named capture group)

836 ワード

Ruby 1.9正則はサポートネーミンググループを追加し、正則がより良い読み取り可能な行を持つようにした.
各セクションの正則を定義し、グループに名前を付け、後に追加できます.
{0}は、一致するコンテンツが取得されないことを示し、gを使用してペアを参照するグループで構成されます.
大きな正則に、/x修飾を加えます.このような複雑な正則は、より読みやすいものになります.

users = %w{
   alice:10.23.52.112:true
   bob:192.168.10.34:false
 }
 
 user_regexp = %r{
   (?<username> [a-z]+ ){0}
   (?<ip_number> [0-9]{1,3} ){0}
   (?<ip_address> (\g<ip_number>\.){3}\g<ip_number> ){0}
   (?<admin> true | false ){0}
   \g<username>:\g<ip_address>:\g<admin>
 }x

users.each do |u|
	r = user_regexp.match(u)
	puts "User #{r[:username]} is from #{r[:ip_address]}"
end

matchとhashを用いて,グループの名前をkeyとしてマッチングコンテンツにアクセスできるようになった.