1

我正在创建一个简单的实用程序来从网页中检索所有 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 的最佳方法吗?

4

2 回答 2

1

描述

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

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

另外我推荐:

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

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

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

在此处输入图像描述

例子

现场演示

示例文本

<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
于 2013-08-17T14:41:20.127 回答
0

尝试使用这个

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

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

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

于 2013-08-17T05:39:04.183 回答