正则表达式解析JSoup中的html源代码

时间:2014-10-16 07:07:30

标签: java html jsoup

我正在尝试从网页源文件中获取值,这是我拥有的html规则

e=d.select("li[id=result_48]");
e=d.select("div[id=result_48]");

这是html标签

<li id="result_48" data-asin="0781774047" class="s-result-item">
<div id="result_48" data-asin="0781774047" class="s-result-item">

我想做的是代替“li”或“div”的任何东西我想在id中获取值...所以我想用RegX代替“li”或“div”

所以Jsoup元素应该检查id = result_48,如果有什么东西像我想要的那样数据。我怎么能这样做。

提前致谢

1 个答案:

答案 0 :(得分:1)

使用不同的属性顺序进行测试。可能错过了一些案例,因此请测试您的实际数据。 假设id属性中没有空格和引号。

public static void main(String[] args) throws Exception {
    String[] lines = {
            "<li id=\"result_48\" data-asin=\"0781774047\" class=\"s-result-item\">",
            "<div id=\"result_48\" data-asin=\"0781774047\" class=\"s-result-item\">",
            "<div data-asin=\"0781774047\" id=\"result_48\" class=\"s-result-item\">",
            "<div data-asin=\"0781774047\" class=\"s-result-item\" id=\"result_48\">" };
    for (String str : lines) {
        System.out.println(extractId(str));
    }
}

private static String extractId(String line) {
    String regex = "";
    regex = regex + "(?:[<](?:li|div)).*id=\""; // match start until id="
    regex = regex + "([^\\s^\"]+)"; // capture the id inside quotes (exclude
                                    // spaces and quote)
    regex = regex + "(?:.*\">)"; // match any characters until the end ">
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(line);
    if (matcher.matches()) {
        return matcher.group(1);
    }
    return null;
}