2010-11-21 16 views
0

在我的C#程序中,我編寫了一個Google搜索函數,它通過從每個頁面獲取源代碼並通過正則表達式獲取URL。URL C的正則表達式#

我的實際正則表達式是:

(?:(?:(?:http)://)(?:w{3}\\.)?(?:[a-zA-Z0-9/;\\?&=:\\-_\\$\\+!\\*'\\(\\|\\\\~\\[\\]#%\\.])+) 

此作品擅長的那一刻,但我得到例如網址,像http://www.example.com/forums/arcade.php?efdf=332

我只是想在這種情況下獲得的URL沒有?efdf=332在結束。

那麼我該如何改變正則表達式呢?

+0

嗨Omegavirus,歡迎來到堆棧溢出。我注意到,爲了正確格式化你的正則表達式,你遇到了很多麻煩,但是你可以讓它更容易。只需粘貼原始正則表達式,將其標記並按下Ctrl-K。這會將文本格式設置爲逐字文本(如HTML'pre'標籤)。錯誤的可能性要小得多。 – 2010-11-21 14:09:13

+0

哦,我不知道,謝謝;) 和正則表達式是從我的C#程序,所以\逃脫。忘了說。 – Omegavirus 2010-11-21 14:10:07

+2

在C#中,使用正則表達式使用逐字字符串('@「foo」')。那麼你不必逃避你的反斜槓。否則你會發瘋。正則表達式已經很難讀取了... – 2010-11-21 14:15:37

回答

1
http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+ 

不一樣的您正則表達式(我已經刪除了很多不必要的冗餘代碼),但停止匹配?之前的鏈接。

在C#:

Regex regexObj = new Regex(@"http://(?:www\.)?[a-zA-Z0-9/;&=:_$+!*'()|~\[\]#%.\\-]+") 

這麼說,我不知道這是匹配的URL的這樣一個好辦法(?約httpsftpmailto等什麼)

+0

非常感謝;) https等是沒有問題,因爲我不會需要他們.. http是所有:) 剛剛測試你的正則表達式和它的接近工作。但現在我得到的URL像http://www.blabla.com/forums/&blabla 如何過濾這些也出來? – Omegavirus 2010-11-21 14:18:58

+0

所以你只是想不帶任何參數的域+路徑? – 2010-11-21 15:11:36

+0

這就是我想要的;) – Omegavirus 2010-11-21 15:13:44

0

您可以使用Uri類訪問URL的各個部分,並從結尾刪除查詢字符串,或者連接所需的部分。