0

这是“这个包含数学符号的正则表达式有什么问题?(Ruby/Rails) ”的变体。

我不明白为什么scan后面的 a对加号 ( )gsub不起作用。当模式包含其他正则表达式特殊字符(如星号 ( ) 和插入符号 ( )+时,它也会失败。*^

~ > irb
>> text = %(test √x+1 √x-1 √x×1 √/1)
=> "test √x+1 √x-1 √x×1 √/1"
>> radicals = text.scan(/√[^\s]*/)
=> ["√x+1", "√x-1", "√x×1", "√/1"]
>> radicals.each do |radical|
?>   text = text.gsub(/#{radical}/, 'hello')
>> end
=> ["√x+1", "√x-1", "√x×1", "√/1"]
>> text
=> "test √x+1 hello hello hello"

正如您在第五行中看到的那样,它scan找到了带有加号 ( +) 的匹配模式,但是当我尝试gsub对每个结果执行时,带有加号的模式被忽略了。关于这里发生了什么的任何想法?

4

1 回答 1

3

当您将字符串替换为具有该/#{string}/样式的正则表达式时,特殊字符(如+)不会被转义。我希望你想使用:

radicals.each do |radical|
    text = text.gsub(/#{Regexp.escape(radical)}/, 'hello')
end

希望这可以帮助!

于 2012-08-23T22:23:55.757 回答