想提取以下文本div内的文本
<div id="tree_001" style='display:none;'>....</div>
<div id="tree_002" style='display:none;'>....</div>
....
写了如下代码,却打印不出数据,不知为何                                  Pattern pattern = Pattern.compile("(<div id='tree_)(.+?)(</div>)");
Matcher matcher = pattern.matcher(source);
while (matcher.find()) {
System.out.println(matcher.group(2));
}

解决方案 »

  1.   

    修正一下("( <div id='tree_)(.+?)( </div>)"); 
    应为("(<div id='tree_)(.+?)( </div>)"); 
      

  2.   

    <[^>]*>(.*)</div>....
    while (matcher.find()) { 
    System.out.println(matcher.group(1)); 
      

  3.   

    你文本里的是双引号,正则表达式却是双引号,当然不匹配了。
    改成Pattern pattern = Pattern.compile("( <div id=\"tree_)(.+?)( </div>)"); 可以取得,不过结果可能不是你要的,建议正则改为(<div id=\"tree_.+>)(.+?)( </div>)
      

  4.   

    你可以试一下:String source = "<div id=\"tree_001\" style='display:none;'>.... </div>"
                    + "<div id=\"tree_002\" style='display:none;'>.... </div> ";
    Pattern pattern = Pattern.compile("<div id=.tree_.+?</div>");
    Matcher matcher = pattern.matcher(source);
    while (matcher.find()) {
         System.out.println(matcher.group());
    }
      

  5.   

    楼主的意思是id为tree_XXX形式的DIV中的内容的话,下面的代码可以String source = "<div id=\"tree_001\" style='display:none;'>DIV内容1</div>"
    + "<div id=\"tree_002\" style='display:none;'>DIV内容2</div> ";
    Pattern pattern = Pattern.compile("<div.+?id=.*?tree_.+?>(.*?)</div>");
    Matcher matcher = pattern.matcher(source);
    while (matcher.find()) {
    System.out.println(matcher.group(1));如果是任意ID的话,2楼的即可
      

  6.   

    按楼上几位的做法试了一下,还是不行啊,虽然5楼的代码可以提取出来数据预先构造的数据,但是换到我这边代码里就不行了.5楼说的没错,我的意思是提取id为tree_XXX形式的DIV中的内容.
    我的源字符串<div id="tree_XXX" style='display:none;'></div>之间有很多嵌套table,难道是这影响了?按道理不会啊,或者是里面有空字符串的问题?
      

  7.   

    这个可以,试下
    String source = "<div id=\"tree_001\" style='display:none;'>fdsf</div>-<div id=\"tree_002\" style='display:none;'>sfsf</div>";
    System.out.println(source);
    System.out.println("________________");
    Pattern pattern=Pattern.compile("(<div id=\"tree.+?)(.+?)(</div>)");
    Matcher m=pattern.matcher(source);
    while(m.find()){
    System.out.println(m.group());
    }
      

  8.   

    本帖最后由 java2000_net 于 2009-03-19 05:57:34 编辑
      

  9.   

    我试了一下,<div id="tree_XXX" style='display:none;'> </div>之间有table的话不会影响,但如果你这两个标签之间又嵌套了div,则得不到想要的结果,这时的处理方法是使用贪婪匹配,即<div.+?id=.*?tree_.+?>(.*)</div>,将中间的*去掉,但这样的话,只能匹配一个div中的内容,而不能将所有的div连到一个字符串匹配,楼主不妨将实际数据发出来String source = "<div id=\"tree_001\" style='display:none;'><table>  <tr><td><table><div> </div></table></td></tr></table></div>";
               
    Pattern pattern = Pattern.compile("<div.+?id=.*?tree_.+?>(.*)</div>");
    Matcher matcher = pattern.matcher(source);
    while (matcher.find()) {
            System.out.println(matcher.group(1));如果里面没有嵌套div的话,输出的时候是System.out.println(matcher.group(1));因为是捕获第一个括号里的,楼主看看是不是不小心漏掉了
      

  10.   

    以下是实际数据里其中一个div,里面没有内嵌div,楼上几位的方法都试过了,
    不知道为何提取不出数据来<div id="tree_1104" style='display:none;'>

    <table width="666" border="0" align="center" cellpadding="0" cellspacing="0" style="margin-top:10px;">
    <tr>

    <td>
    <TABLE>
    <tr>
    <td align="center"><span class="menu_blue">
    <input type="radio" name="seg1" value="radiobutton" 
    onClick="choice_tree('1/1/tree1104/Y/10//注释');showUI('1104','注释')" )/></span>
    </td>
    </tr>
    <tr>
    <td height="25" align="center" class="menu_blue">tree</td>
    </tr>
    <tr>
    <td height="25" align="center"><span style="font-size:14px;color:#000000; font-weight:bold; font-family:'宋体'";></span></td>
       </tr>
    </TABLE>
    </td>

    <td>
    <TABLE>
    <tr>
    <td align="center"><span class="menu_blue">
    <input type="radio" name="seg1" value="radiobutton" 
    onClick="choice_tree('1/1/tree1104/B/10//注释');showUI('1104','注释')" )/></span>
    </td>
    </tr>
    <tr>
    <td height="25" align="center" class="menu_blue">tree</td>
    </tr>
    <tr>
    <td height="25" align="center"><span style="font-size:14px;color:#000000; font-weight:bold; font-family:'宋体'";></span></td>
       </tr>
    </TABLE>
    </td>

    <td>
    <TABLE>
    <tr>
    <td align="center"><span class="menu_blue">
    <input type="radio" name="seg1" value="radiobutton" 
    onClick="choice_tree('1/1/tree1104/H/10//注释');showUI('1104','注释')" )/></span>
    </td>
    </tr>
    <tr>
    <td height="25" align="center" class="menu_blue">tree</td>
    </tr>
    <tr>
    <td height="25" align="center"><span style="font-size:14px;color:#000000; font-weight:bold; font-family:'宋体'";></span></td>
       </tr>
    </TABLE>
    </td>

    </tr>
    </table>
    </div>