2010-05-04 18 views
6
删除

我想在这里实现的是让我们说我们有两个例子网址:如何多个后斜线可以从URL中的Ruby

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" 

在红宝石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/

+1

@other_people_reading_this_question如果像我一样,你只需要删除一个结尾的斜线,您可以用'字符串#chomp'。 E.g:' “/路径/到/目录/” 格格( “/”)' – Ajedi32 2013-07-23 14:59:24

回答

23

如果你只是需要从URL字符串末尾删除所有斜线,那么你可以试试下面的正则表达式:

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

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

希望这会有所帮助。

+0

很好的回答。一个小的regex评论是这里不需要括号。 – user253455 2010-05-04 20:28:48

+2

谢谢亚历克斯。我想到昨天gsub(/ \/* $ /)的作用也与crudson提到的一样。 – splintercell 2010-05-06 10:50:22

4

虽然这个线程是有点老顶答案是相当不错的,但我建议另一种方式来做到这一点:

/^(.*?)\/$/ 

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

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

匹配的几个字符,因为它可以和捕捉它,而比赛尽可能多的斜线,因为它可以在最后。

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

+1

upvote是一个纯正则表达式,而不是使用特定于语言的函数 – theEpsilon 2017-02-03 19:40:34

+0

感谢这么长时间的投票@theEpsilon:D我认为这个请求可以只使用正则表达式,而不是一些语言特定的功能。 – nevets 2017-02-04 10:16:39