rubyonrails中的Regex替换表达式

rubyonrails中的Regex替换表达式,ruby,regex,ruby-on-rails-3,Ruby,Regex,Ruby On Rails 3,我需要根据字符串上的正则表达式搜索替换db字段中的一些文本 到目前为止,我有: foo = my_string.gsub(/\[0-9\]/, "replacement" + array[#] + "text") 因此,我在字段中搜索括号([1]、[2]等)包围的数字的每个实例。我想做的是在搜索中查找每个数字(括号内),并使用该数字查找特定的数组节点 有什么想法吗?如果有人需要任何澄清,请告诉我。最简单的方法是使用块格式: 注意正则表达式中的捕获组。在块内部,全局$1是第一个捕获组匹配的 您也

我需要根据字符串上的正则表达式搜索替换db字段中的一些文本

到目前为止,我有:

foo = my_string.gsub(/\[0-9\]/, "replacement" + array[#] + "text")
因此,我在字段中搜索括号([1]、[2]等)包围的数字的每个实例。我想做的是在搜索中查找每个数字(括号内),并使用该数字查找特定的数组节点


有什么想法吗?如果有人需要任何澄清,请告诉我。

最简单的方法是使用块格式:

注意正则表达式中的捕获组。在块内部,全局
$1
是第一个捕获组匹配的

您也可以使用命名的捕获组,但这需要一个不同的全局组,因为
$~
是(AFAIK)获取块内当前
匹配数据
对象的唯一方法:

foo = my_string.gsub(/\[(?<num>\d+)\]/) { |m| a[$~[:num].to_i] }
foo=my_string.gsub(/\[(?\d+)\]/){m|a[$~[:num]。to_i]}
例如:

>> s = 'Where [0] is [1] pancakes [2] house?'
=> "Where [0] is [1] pancakes [2] house?"
>> a = %w{a b c}
=> ["a", "b", "c"]

>> s.gsub(/\[(\d+)\]/) { a[$1.to_i] }
=> "Where a is b pancakes c house?"

>> s.gsub(/\[(?<num>\d+)\]/) { |m| a[$~[:num].to_i] }
=> "Where a is b pancakes c house?"
>s='[0]是[1]煎饼[2]屋在哪里?'
=>“煎饼[2]屋[1]在哪里?”
>>a=%w{a b c}
=>[“a”、“b”、“c”]
>>s.gsub(/\[(\d+)\]/{a[$1.to_i]}
=>“a在哪里b煎饼c在哪里?”
>>s.gsub(/\[(?\d+)\]/{m | a[$~[:num]。to|i]}
=>“a在哪里b煎饼c在哪里?”

命名的捕获示例不起作用
m
是一个字符串,
m['num']
不返回命名的捕获。你可以使用
s.gsub(/\[(?\d+)\]/){a[$~[:num]。to\u i]}
@Stefan:Wow,我怎么会错过呢。
gsub(/\[(\d+)\]/){m|a[m[1]。to|i]}
版本也不能真正工作(除非数字保证只有一位数字)。
>> s = 'Where [0] is [1] pancakes [2] house?'
=> "Where [0] is [1] pancakes [2] house?"
>> a = %w{a b c}
=> ["a", "b", "c"]

>> s.gsub(/\[(\d+)\]/) { a[$1.to_i] }
=> "Where a is b pancakes c house?"

>> s.gsub(/\[(?<num>\d+)\]/) { |m| a[$~[:num].to_i] }
=> "Where a is b pancakes c house?"