2013-08-16 288 views
1

我正在創建一個簡單的實用程序來從網頁中檢索所有HTTP網址。從網頁獲取所有HTTP網址

最初我打算使用HTML解析庫來解析出HREF標籤,但我知道我需要檢索腳本中包含的URL(下面的示例腳本),因此我開始嘗試使用正則表達式從網頁獲取所有HTTP網址,但由於某種原因,我的正則表達式無法正常工作。

URL可以是一個javascript裏面

<script> 
    if(jQuery.browser.msie) 
    { 
     var v= 'http://test.com/test/test'; 
    } 
</script> 

我的程序:

try { 

      BufferedReader in=new BufferedReader(new FileReader("c:\\sample\\sample.html")); 
      while ((inputLine = in.readLine()) != null) { 
       System.out.println(inputLine); 
       String pattern = "http?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?"; 

       // Create a Pattern object 
       Pattern r = Pattern.compile(pattern); 
       // Now create matcher object. 
       Matcher m = r.matcher(inputLine.replaceAll("http://", "\nhttp://")); 
       while (!m.hitEnd()) { 
        if (m.find()) { 
         System.out.println("Found value: " + m.group(0)); 
        } else { 
         //System.out.println("NO MATCH"); 
        } 
       } 
      } 
      in.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

有人可以幫助我解決這個問題還是讓我知道的最好的方法,從網頁檢索所有網址?

+1

http://stackoverflow.com/a/1732454/1266600 :) – sushain97

回答

1

描述

您的表情有錯字。它應該使s可選。

https?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)? 
    ^

此外,我建議:

  • 與非捕捉組更換( ... )捕捉組像...
  • 你不需要逃脫.文字組[.]
  • 裏面添加一個測試,以確保您不會captureing周圍您的網址
  • 收盤報價重寫部分尋找/folder/subfolder部分,作爲重複https?:\/\/(?:[\w-]+.)+(?::\d+)?(?:\/[\w\/_.]*)*?(?:\?\S+)?(?=['"\s])

    爲Java String:尋找最初的斜線後面的文件夾名稱

正則表達式的非捕獲組

enter image description here

Live Demo

示例文本

<script> 
    if(jQuery.browser.msie) 
    { 
     var v= 'http://test.com/test/test'; 
    } 
</script> 
<a class="test" href="http://blablablablabla.com">Third Link</a> 

相配

[0] => http://test.com/test/test 
[1] => http://blablablablabla.com 
0

嘗試使用此

\A'http:\/\/[\w\W]+'\z 

這將檢查您的網址必須從http://首發,並在啓動一個字符串,並結束與作爲的URL nowadys什麼都可以進來,所以我們必須允許特殊字符如?:,-_/\以及數字等數字等

所以這將讓你所有的URL在文件中存在。