9

我在这里想要实现的是假设我们有两个示例 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"

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

如果我们使用正则表达式,则从中/^(.*)\/$/删除一个斜杠,并且对./url1url2

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

这里的重点是我不希望我的系统拥有http://www.example.com/并被http://www.example.com视为两个不同的 URL。http://emy.dod.com/kaskaa/dkaiad/amaa////和也是如此http://emy.dod.com/kaskaa/dkaiad/amaa/

4

3 回答 3

28

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

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

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

希望这可以帮助。

于 2010-05-04T13:19:06.623 回答
4

虽然这个线程有点旧并且最佳答案很好,但我建议另一种方法来做到这一点:

/^(.*?)\/$/

您可以在这里看到它的实际效果:https ://regex101.com/r/vC6yX1/2

这里的魔力是*?,它进行了惰性匹配。所以整个表达式可以翻译为:

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

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

于 2015-09-25T15:21:48.393 回答
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"
于 2018-10-19T16:46:57.310 回答