2010-05-04 19 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