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

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

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

如何提取条带化的URL?

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

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

如果我们使用正则表达式,那么/^(.*)\/$//^(.*)\/$/删除单个斜杠/并且对url2无效。

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

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

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

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

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

希望这可以帮助。

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

 /^(.*?)\/$/ 

你可以在这里看到它: https : //regex101.com/r/vC6yX1/2

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

匹配尽可能少的字符并捕获它,同时在最后匹配尽可能多的斜杠。

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

 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"