如何从Ruby中的URL中删除多个尾部斜杠

时间:2010-05-04 13:05:58

标签: ruby regex malformed url-parsing

我在这里想要实现的是让我们说有两个示例网址:

url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa//////////"
url2 = "http://www.example.com/"

如何提取带条纹的网址?

url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa"
url2 = "http://http://www.example.com"
Ruby中的

URI.parse清理了某些类型的格式错误的URL,但在这种情况下无效。

如果我们使用正则表达式,则/^(.*)\/$/会从/中删除单个斜杠url1,但对url2无效。

有人知道如何处理这种类型的URL解析吗?

这里的要点是我不希望我的系统将http://www.example.com/http://www.example.com视为两个不同的网址。同样适用于http://emy.dod.com/kaskaa/dkaiad/amaa////http://emy.dod.com/kaskaa/dkaiad/amaa/

3 个答案:

答案 0 :(得分:24)

如果您只需要删除url字符串末尾的所有斜杠,那么您可以尝试以下正则表达式:

"http://emy.dod.com/kaskaa/dkaiad/amaa//////////".sub(/(\/)+$/,'')
"http://www.example.com/".sub(/(\/)+$/,'')

/(\/)+$/ - 此正则表达式在字符串末尾找到一个或多个斜杠。然后我们用空字符串替换这个匹配。

希望这有帮助。

答案 1 :(得分:4)

虽然这个帖子有点陈旧,但最重要的答案是相当不错的,但我建议采用另一种方法:

/^(.*?)\/$/

您可以在此处看到它:https://regex101.com/r/vC6yX1/2

这里的魔力是*?,这是一个懒惰的匹配。所以整个表达式可以翻译为:

匹配尽可能少的字符并捕获它,同时匹配尽可能多的斜线。

这意味着,用更简单的英语,删除所有尾部斜杠。

答案 2 :(得分:0)

def without_trailing_slash path
  path[ %r(.*[^/]) ]
end

path = "http://emy.dod.com/kaskaa/dkaiad/amaa//////////"

puts without_trailing_slash path # "http://emy.dod.com/kaskaa/dkaiad/amaa"