来自gsub的网址不正确

时间:2010-01-23 16:02:46

标签: ruby-on-rails ruby

我在使用gsub方法获取网址后尝试检查网址时遇到了一些问题。

从控制台可以正常工作:

('http://ale.it' =~ URI::regexp).nil?.to_s
=> "false"

但如果我发布它不起作用:

"http://ale.it".gsub(/http[s]?:\/\/[^\s]+/, ('\0' =~ URI::regexp).nil?.to_s)   
=> "true"

如何获得正确的网址?

2 个答案:

答案 0 :(得分:3)

这是对你的两个例子的解释。虽然这不是一个真正的答案,但是在评论中有点长。

=~返回匹配发生的位置,如果找不到匹配则返回nil

在您的第一个示例中,“http://ale.it”匹配URI::regexp从位置0开始,因此您获得0.nil?这是假的,转换为字符串“false”

第二个示例中的

gsub采用2个参数,一个模式和一个替换字符串,并用替换替换模式的所有匹配。

'\ 0'与URI::regexp不匹配,因此('\0' =~ URI::regexp).nil?为真,并且应用to_s时字符串为“true”。

http://ale.it”匹配/http[s]?:\/\/[^\s]+/,因此将替换为“true”。

您必须扩展您的问题以解释您想要实现的目标。

答案 1 :(得分:0)

我解决了:

"http://ale.it".gsub(/http[s]?:\/\/[^\s]+/) do |m|
 (m =~ URI::regexp).nil?.to_s) 
end