我在这里要实现的目标是说我们有两个示例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"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top