java - 获取网页中所有HTTP url

标签 java regex html-parsing href

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

最佳答案

描述

你的表达有错别字。它应该使 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

关于java - 获取网页中所有HTTP url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18283369/

相关文章:

java - 字符串/字节效率和内存行为

java - 有没有一种方法可以在没有所有这些按钮的情况下嵌入 TightVNC Java Viewer?

python - 如何在Python中将字符串与点匹配

android - jsoup 解析 tr,td 与类和 id for 循环

Java Swing - TableLayout - 未从布局中删除的组件

java - 2 次非法注解异常

javascript - 如何修改以下脚本以能够接收带空格的参数?

正则表达式 - 如何搜索单词的单数或复数版本

javascript - 从下拉列表中选择值并获取其隐藏值

java - 如何使用 jsoup 检查 HTML 元素的类型