本帖最后由 superliyubo 于 2012-05-05 12:35:54 编辑

解决方案 »

  1.   

    String regex = "<table cellpadding=\"0\" cellspacing=\"0\" class=\"result\" id=\"\\d+\".*><tr><td class=f><h3 class=\"t\"><a.*href=\"([\\s\\S]*?)\".*target=\"_blank\">([\\s\\S]*?)</a>([\\s\\S]*?)<br>";
    感觉正则表达式可以优化。
    .*千万别这么弄,改成.*? 感觉你是.*用多了。
      

  2.   

    如果有换行 加上(?s),具体翻API。
      

  3.   

    设置断点就卡死在这里了
    while (m != null && m.find()) { //该正则在这里m.find卡死。。然后CPU就100%了
      

  4.   

    这个正则,可匹配度太高了,变成大量的回溯。比如这句话:
    String regex = "<table cellpadding=\"0\" cellspacing=\"0\" class=\"result\" id=\"\\d+\".*><tr><td class=f><h3 class=\"t\"><a.*href=\"([\\s\\S]*?)\".*target=\"_blank\">([\\s\\S]*?)</a>([\\s\\S]*?)<br>";中的第一个片段:
    id=\"\\d+\".*>建议修改成终止符法,不要让.*任意发挥:
    id=\"\\d+\"[^>]*>把结束条件加进去,避免匹配失败所导致的回溯。
    再比如第二个片段:
    <a.*href=这种匹配也比较麻烦,因为:
      .*是贪婪算法,可以一直匹配到全文结束,然后再回溯。
    应该修改为:
      .*?这种勉强算法,也就是能不匹配就不匹配。
    结合前面建议的终止符法,改造为:
    <a[^>]*?href=
      
    建议一开始不要搞这么长的正则,慢慢来,逐步改造,逐步增加。
      

  5.   


    明显这样正则不对。
    建议最好别用正则分析网页,使用jsoup等开源工具比较好。
      

  6.   

    [\\s\\S]问题在这里!把这个改成“.”并在这个正则表达式最前面加上 (?s) 就可以了。
      

  7.   

    非常感谢大家的热心回答已经解决了,特别感谢 ldh911