如何从Ruby中的URL中删除多个尾随的斜线
-
03-10-2019 - |
题
我在这里要实现的目标是说我们有两个示例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
在红宝石中,对某些类型的畸形URL进行了消毒,但在这种情况下是无效的。
如果我们使用正则言论 /^(.*)\/$/
删除一个斜线 /
从 url1
并且无效 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(/(\/)+$/,'')
/(\/)+$/
- 此正则是在字符串末端找到一个或多个斜线。然后,我们用空字符串替换此匹配。
希望这可以帮助。
其他提示
尽管此线程有点旧,最佳答案非常好,但是我建议另一种方法:
/^(.*?)\/$/
您可以在这里看到它: 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"
不隶属于 StackOverflow