Ruby 1.9 regex (named capture group)

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就可以访问匹配内容了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值