2010-02-26 117 views
6

我認爲這將是一個簡單的谷歌搜索,但顯然不是。什麼是我可以在C#中使用的正則表達式從一個更大的文本解析出包括任何查詢字符串的URL ?我花了很多時間,發現了很多不包含查詢字符串的例子。我不能使用System.URI,因爲假設你已經有了URL ......我需要在周圍的文本中找到它。正則表達式的URL包括查詢字符串

+0

有什麼規則?它們是否會被正確編碼,或者字符串中是否有空格?如果您將添加一個非空白字符的搜索到它的末尾,如果他們將正確編碼幾乎所有您以前應該工作的模式。 – Guildencrantz 2010-02-26 17:02:55

回答

3

這應該得到公正的東西(隨意添加附加議定書):

@"(https?|ftp|file)\://[A-Za-z0-9\.\-]+(/[A-Za-z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*" 

真正的困難是找到結束。現在,這種模式依賴於找到無效字符。除域名之外的字母,數字,連字符或句點之外的任何內容,除此之外的內容除正斜槓(/),問號(?),&符號(&),等號(=),分號(;),加號(+),感嘆號(!),撇號/單引號('),打開/關閉括號,星號(*),下劃線(_),波浪號(〜)或百分號)之後的域名。

注意,這將使無效的網址,像

http://../ 

而且它的URL後,便拿起東西,如在此字符串:

也許你應該嘗試http://www.google.com

其中"http://www.google.com."(與尾隨期間)將匹配。

這也將錯過沒有用協議規範(開始具體地,第一組括號內的協議。例如,它會錯過這個字符串的URL網址:

也許你應儘量www.google.com。

這是很難得到每一個案件沒有一些定義好邊界。

+0

不能正常工作...請參閱此處的響應:http://stackoverflow.com/questions/9125016/get-url-from-a-text – kape123 2012-05-10 07:54:17

+0

@ kape123:「不工作」不是很有幫助。我明確指出了它的缺點。它按照所述的方式工作是否還有其他一些您希望工作的案例不適用? – 2012-05-11 02:59:45

0

使用ABNF在RFC3986的結束爲起點,以得到它的權利。

這將它們用於Python中的URI驗證;不是你要找的東西,但它應該給你一個方向你應該去的想法: http://gist.github.com/138549

0

對不起,我還沒有能夠添加評論,但想指出,P爸爸的答案要求稍微調整一下:

@"(https?|ftp|file)\://[a-zA-Z0-9\.\-]+(/[a-zA-Z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*" 
+1

除了顛倒大寫和小寫字符的順序(沒有任何操作)之外,我找不到任何不同的東西,在這樣做的時候,修正了我在'aZ'(小寫)一個'大寫'Z')。下一次,只是指出錯字會更簡單。我會解決它。 – 2010-08-13 16:23:13

相關問題