从html源代码获取链接

时间:2012-03-06 10:45:11

标签: java html

我有一个字符串作为html源代码。我想只获取该字符串中的链接并将这些链接放入ArrayList中。如您所知,我希望在<a href="THE LINK I WANT">之间获得一些字符串但我想在不使用任何外部库的情况下执行此操作。如何使用String类和循环的简单算法来完成它?谢谢!

2 个答案:

答案 0 :(得分:5)

Java Regex API不是实现目标的合适工具。使用其他答案中提到的高效,安全且经过良好测试的高级工具。

如果您的问题与Regex API相关,而不是现实生活中的问题(例如学习目的) - 您可以使用以下代码执行此操作:

String html = "foo <a href='link1'>bar</a> baz <a href='link2'>qux</a> foo";
Pattern p = Pattern.compile("<a href='(.*?)'>");
Matcher m = p.matcher(html);
while(m.find()) {
   System.out.println(m.group(0));
   System.out.println(m.group(1));
}

输出是:

<a href='link1'>
link1
<a href='link2'>
link2

请注意懒惰/不情愿的资格赛*?必须使用以减少分组到单个标记。组0是整个匹配,组1是下一组匹配(下一对括号)。


需要考虑的注意事项:

使用正则表达式从HTML中提取值总是一个错误。 HTML语法可能首先出现得非常复杂,而且即使是非常复杂的正则表达式,页面也很容易识别出来。

请改用HTML Parser。另请参阅What are the pros and cons of the leading Java HTML parsers?

答案 1 :(得分:1)

我找到了答案!!!!!

public ArrayList<String> getLinks() {

    String link = "";

    for(int i = 0; i<url.length()-6; i++) {
        if(url.charAt(i) == 'h' && url.charAt(i+1) == 'r') {
            for(int k = i; k<url.length();k++ ){
                if(url.charAt(k) == '>'){
                    link = url.substring(i+6,k-1);
                    links.add(link);
                    // Break the loop 
                    k = url.length();
                }
            }
        }
    }
    return links;