3

我有一个存储在哈希中的替换规则“表”,其中每个键是规则,每个值是一个方法,它将获取匹配的文本并将其作为参数发送。每个方法都会返回一个字符串。除了我不知道如何发送所有比赛。我如何填写send电话中的评论以完成此操作?

Sub_Rules = {
   /N\[(\d+)\]/i          => :do_something,
   /N\[(\d+)\]\[(\d+)\]/i => :do_something_else
}

def do_something(*args)
  "something based on the args"
end

def do_something_else(*args)
  "something else based on the args"
end

text = "N[2]"
Sub_Rules.each {|rule, method|
  p text.gsub(rule) {send(method, #the matches?)}
}

如果我想对其进行硬编码,我可能会执行以下操作:

text.gsub(/N\[(\d+)\]/i) { do_something($1) }
4

1 回答 1

4

如果text.gsub(/N\[(\d+)\]/i) { do_something($1) }有效,那么这也将:

Sub_Rules.each do |rule, method|
  p text.gsub(rule) { send(method, $1) }
end

但我怀疑这text.gsub(/N\[(\d+)\]/i) { do_something($1) }实际上不起作用,因为它也没有“发送所有匹配”。相反,您可能想要

Sub_Rules.each do |rule, method|
  p text.gsub(rule) { send(method, $~.captures) }
end

这将发送来自正则表达式中每个组的捕获数组。

于 2012-11-04T22:30:21.203 回答