Ruby正则表达式中的符号组名(如Python中)
我在学习Python的时候发现了一个很实用的正则表达式工具(我还是个Python初学者)。比如,使用这个正则表达式
(?P<id>[a-zA-Z_]\w*)
我可以把匹配到的数据称为
m.group('id')
(完整文档:可以在这里查找“符号组名称”)
在Ruby中,我们可以通过$1, $2
来访问匹配到的内容,或者使用MatchData对象(比如m[1], m[2]
等等)。那么在Ruby中有没有类似Python的符号组名称的用法呢?
2 个回答
10
Ruby 1.9版本引入了命名捕获的功能:
m = /(?<prefix>[A-Z]+)(?<hyphen>-?)(?<digits>\d+)/.match("THX1138.")
m.names # => ["prefix", "hyphen", "digits"]
m.captures # => ["THX", "", "1138"]
m[:prefix] # => "THX"
你可以使用 \k<前缀>
这样的方式来进行反向引用。
12
早期的Ruby版本没有命名组(感谢Alan在评论中指出这一点!),但是如果你使用的是Ruby 1.9及以上版本……:
(?<name>subexp)
这个写法在Ruby表达式中表示一个命名组;而 \k<name>
是在替换时引用命名组的方法,如果你在找这个的话!