最近在做一个网站抓取新闻的网站。
需要用到正则进行匹配。但是新闻内部有广告需要去除掉。
别的都抓好了。正文有些问题。
不晓得怎么写。。
例子:
<div id="aa">
内容
<div id="bbb">广告</div>
<div id="ccc">广告2</div>
</div>
我现在是提取出来了这些。但是想要替换掉最外层div里面的所有div。但是最外层的div内的保留。
应该怎么用正则匹配出除了最外层以外的div标签。

解决方案 »

  1.   

    使用分组,直接替换分组中的div
      

  2.   


    Pattern p = Pattern.compile("<div[^>]*[>]?(.*)</div>");
    Matcher m = p.matcher("<div id=\"aa\">内容<div id=\"bbb\">广告</div><div id=\"ccc\">广告2</div></div>");
    if(m.find())
    {
    System.out.println("haha::::"+m.group(1));
    }
      

  3.   

    这个应该可以。我试验一下。还有个问题(和本贴问题无关)就是我要匹配的地址有许多个div。我如何匹配和我要<div>相对应的</div>结束
    例子:
    还是上面的那个例子吧。匹配出id为aa的所有内容。
      

  4.   

    "<div[^>]*[>]?([^<]*)(.*)</div>"
    这个可以 group(1)可以取出 最外层div的内容将以上表达式改成  "<div\\s+id=\"aa\"[>]?([^<]*)(.*)</div>"如果要指定id,建议将正则式中的 id 设置成变量
    Pattern p = Pattern.compile("<div\\s+id=\"aa\"[>]?([^<]*)(.*)</div>");
    Matcher m = p.matcher("<div id=\"aa\">内容<div id=\"bbb\">广告</div><div id=\"ccc\">广告2</div></div>");
    if(m.find())
    {
    System.out.println("haha::::"+m.group(0));
    System.out.println("haha::::"+m.group(1));
    System.out.println("haha::::"+m.group(2));
    }如果还想去嵌套在里面的div, 将匹配出来的内嵌div循环使用该正则式,应该就可以了
      

  5.   


    这个正则里如何表示嵌套关系,我还不清楚,你可以搜一下http://www.cnblogs.com/yanbinboy/archive/2008/05/19/1202634.html
    http://www.imkevinyang.com/tags/html%E5%B5%8C%E5%A5%97%E6%A0%87%E7%AD%BE%E5%8C%B9%E9%85%8D
    http://www.byywee.com/page/M0/S249/249012.html