2011-04-27 85 views
1

嘿傢伙。我,想有由一個正則表達式匹配所有的URL像這樣:正則表達式ISSUE - 無法匹配以無結尾的URL

  1. http://example.com
  2. http://example.com/
  3. http://example.com/index.html
  4. http://example.com/index
  5. http://example.com/index/
  6. http://www.example.com
  7. http://www.example.com/
  8. http://www.example.com/index.html
  9. http://www.example.com/index
  10. http://www.example.com/index/

,並匹配有 '#' 或'網址嗎? '直到那兩個人之前的角色。 這樣 http://example.com/index.php?p=Hey - >http://example.com/index.php

正則表達式代碼選擇除了一個情況下,只有某些類型的文件或文件夾時,我至今運作良好:

  • ,如果我有一個不是結束的URL無論是文件擴展名(例如:.html,.php)還是文件夾(例如:/),該模式都將無法正確匹配,因爲某些URL(例如:http://example.com/about-me)將被排除。

任何幫助表示讚賞。感謝大家。


這是正則表達式:

^(?<protocol>http(s?))://(?<domain>[^/\r\n#?]+)(?<path>/[^?#]*(?:html|php|/))? 
+0

你只是想從URL中刪除'?'或'#'中的所有內容嗎? – morja 2011-04-27 12:05:34

+0

基本上是的,每個網址都可以,但沒有任何結局。這是因爲有例如WordPress的URL: - http://myblog.com/about-me – Briganti 2011-04-27 12:08:53

回答

1

不知道你使用的是什麼語言,但如果你有一個網址列表已經正則表達式可能沒有必要爲這個。

在C#中,你可以做這樣的事情:

string a = "http://example.com/index.php?p=Hey"; 
string b = a.Remove(a.IndexOfAny(new char[] {'?', '#'}, 0)); 
+0

你確實有一點..我使用PHP。我正考慮在一次旅行中檢查URL的有效性,但上面的代碼不會這樣做,所以我可以試試看。 – Briganti 2011-04-27 12:18:35

1

這可能會做你想要什麼:

​​

查詢將包含您可能要忽略其它。

+0

幾乎corect ..我想我忘了上面提到,我也需要掃描(這整個事情是爲了一個小爬蟲)只有像(HTML | PHP | /)或文件夾的某些頁面。這就是問題發生的原因。 – Briganti 2011-04-27 12:19:49

+0

那麼,你不能確定以'/ /結尾的URL還是沒有任何特殊字符結尾的URL是否是一個文件夾。 'http:// example.com/about-me'可以是一個文件夾或一個文件,你不能告訴....大多數網絡服務器處理文件夾路徑時不會跟蹤'/' – morja 2011-04-27 12:25:31

+0

實際上,在一個URL中,文件夾實際上並不存在。 Web服務器提供的所有內容都是文件,有些可能會列出其他文件,但在實際查看文件之前無法確定。 – morja 2011-04-27 12:33:34

相關問題