【问题标题】:Get all HTTP url from a webpage从网页中获取所有 HTTP url
【发布时间】:2013-08-19 10:53:10
【问题描述】:

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

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

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();
        }

谁能帮我解决这个问题或让我知道从网页中检索所有 URL 的最佳方法?

【问题讨论】:

标签: java regex html-parsing href


【解决方案1】:

说明

你的表达有错别字。它应该使s 可选。

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

我也推荐:

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

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

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

示例

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

【讨论】:

    【解决方案2】:

    试试这个

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

    这将检查您的 url 必须从 http:// 开始,并且是一个开始和结束的字符串,并且在 url nowadys 之间任何东西都可以出现,所以我们必须允许像 ?:,-_/\ 这样的特殊字符以及数字数字等。

    所以这将为您提供文件中存在的所有网址。

    【讨论】:

      猜你喜欢
      • 2011-04-08
      • 2013-02-23
      • 2021-04-26
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多