我在使用gsub方法获取它们之后尝试检查网址时遇到了一些问题。来自gsub的网址不正确
从控制台正常工作:
('http://ale.it' =~ URI::regexp).nil?.to_s
=> "false"
,但如果我推出这个它不工作:
"http://ale.it".gsub(/http[s]?:\/\/[^\s]+/, ('\0' =~ URI::regexp).nil?.to_s)
=> "true"
我怎样才能得到正确的网址吗?
我在使用gsub方法获取它们之后尝试检查网址时遇到了一些问题。来自gsub的网址不正确
从控制台正常工作:
('http://ale.it' =~ URI::regexp).nil?.to_s
=> "false"
,但如果我推出这个它不工作:
"http://ale.it".gsub(/http[s]?:\/\/[^\s]+/, ('\0' =~ URI::regexp).nil?.to_s)
=> "true"
我怎样才能得到正确的网址吗?
我解决了:
"http://ale.it".gsub(/http[s]?:\/\/[^\s]+/) do |m|
(m =~ URI::regexp).nil?.to_s)
end
这是对你的2个例子做什么的解释。虽然这不是一个真正的答案,但它适合评论的时间有点长。
=~
返回匹配发生的位置或nil
如果未找到匹配项。
在您的第一个例子“http://ale.it”匹配URI::regexp
起始于位置0这样就可以获得0.nil?
这是假的,转换为字符串在第二个例子“假”
gsub
需要两个参数,一个图案和替换字符串并用替换替换模式的所有匹配。
'\ 0'不匹配URI::regexp
因此('\0' =~ URI::regexp).nil?
为真,to_s
应用为字符串“true”。
“http://ale.it”匹配/http[s]?:\/\/[^\s]+/
因此被替换为“true”。
你将不得不扩大你的问题来解释你想要达到的目标。
很高兴你解决了这个问题,但现在还不能完全清楚你试图做:) – mikej 2010-01-25 08:58:14