【发布时间】:2011-01-17 23:31:35
【问题描述】:
我有一个带有 regex 键和 block 值的哈希。类似于以下内容:
{ 'test (.+?)' => { puts $1 } }
显然,不是完全那样,因为块被存储为 Proc,但这就是想法。
我稍后会进行一个正则表达式匹配,看起来很像这样
hash.each do |pattern, action|
if /#{pattern}/i.match(string)
action.call
end
end
这个想法是将块存储在哈希中,以便我将来更容易扩展,但现在regex 捕获不会传递给块。有没有办法干净利落地支持我在regex 中放入的任意数量的捕获(例如,一些regex 模式可能有1 个捕获,其他可能有3 个)?
【问题讨论】:
-
这并不能解决您的问题,但为什么将模式存储为字符串而不是正则表达式?
-
没有真正的原因。我正在使用一种方法来存储哈希,因此它更易于阅读(
on(pattern, &block) hash[pattern] = block基本上是我正在使用的方法),并且似乎更容易编写on 'test (.+?)' do puts $1 end。