除了协议定义('http [s]://','ftp://'等)之外,我想替换URL中的所有多个斜杠。我该怎么做?
此代码替代,没有任何例外:
url.gsub(/\/\/+/, '/')
答案 0 :(得分:9)
您只需要排除任何以:
url.gsub(/([^:])\/\//, '\1/')
答案 1 :(得分:2)
我尝试使用URI:
require "uri"
url = "http://host.com//foo//bar"
components = URI.split(url)
components[-4].gsub!(/\/+/, "/")
fixed_url = [components[0], "://", components[2], components[-4]].join
但这似乎并不比使用正则表达式好。
答案 2 :(得分:0)
gsub
可以阻止:
url = 'http://host.com//foo/bar'
puts url.gsub(%r{.//}) { |s| (s == '://') ? s : s[0] + '/' }
>> http://host.com/foo/bar
或者,正如@Phrogz如此友好地提醒我们:
puts url.gsub(%r{(?<!:)//}, '/')
>> http://host.com/foo/bar