从网页获取所有HTTP网址

时间:2013-08-16 23:10:30

标签: java regex html-parsing href

我正在创建一个简单的实用程序来从网页中检索所有HTTP URL。

最初我曾计划使用HTML解析库来解析HREF标签,但我知道我需要检索脚本中包含的URL(下面的示例脚本)因此我开始尝试使用正则表达式来获取来自网页的所有HTTP网址但由于某种原因我的正则表达式无法正常工作。

网址可以在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();
        }

有人可以帮助我解决此问题,或让我知道从网页检索所有网址的最佳方法吗?

2 个答案:

答案 0 :(得分:1)

描述

你的表情有拼写错误。它应该使s可选。

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

我也建议:

  • ( ... )捕获组替换为非捕获组,例如(?: ... )
  • 您无需转义字符组.
  • 中的[.]
  • 添加测试以确保您没有捕获网址周围的密切引号
  • 重写您的部分,寻找/folder/subfolder部分作为重复的非捕获组,寻找初始斜杠,后跟文件夹名称

正则表达式:https?:\/\/(?:[\w-]+.)+(?::\d+)?(?:\/[\w\/_.]*)*?(?:\?\S+)?(?=['"\s])

作为Java字符串:"https?:\\/\\/(?:[\\w-]+.)+(?::\\d+)?(?:\\/[\\w\\/_.]*)*?(?:\\?\\S+)?(?=['\"\\s])"

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

答案 1 :(得分:0)

尝试使用此

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

这将检查您的网址是否必须从http://开始,并且在开始和结束时都是一个字符串,而在url nowadys之间可以出现任何内容,因此我们必须允许特殊字符?:,-_/\还有数字等等。

这样就可以获得文件中的所有网址。