Ruby正则表达式:替换URL中的双斜杠

时间:2011-02-11 00:13:24

标签: ruby regex

除了协议定义('http [s]://','ftp://'等)之外,我想替换URL中的所有多个斜杠。我该怎么做?

此代码替代,没有任何例外:

url.gsub(/\/\/+/, '/')

3 个答案:

答案 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