被匹配的字符串是html代码如下: <tr bgcolor="#ffffee">
<td align="center">上海</td>
<td align="left">0</td>
<td align="left"><a href='aaa.asp?'>77</a></td>
</tr>
我想取'上海',‘0’和‘77’这3个值。<a href='aaa.asp?'>也许有,也许没有。用的正则表达式是(?s)<tr bgcolor=\"#ffffee\"(?:.(?!<tr))*?(?:\\s*<td.*?>(.*?)</td>\\s*)(?:\\s*<td.*?>(<a href.*?>)*?(.*?)(</a>)*?</td>\\s*)(?:\\s*<td.*?>(<a href.*?>)*?(.*?)(</a>)*?</td>\\s*).*?</tr>第3个值'77'匹配不出来啊

解决方案 »

  1.   

    你这到底问的是哪一个?
    是标题的还是正文的?
    标题的那个直接是无解:
    什么叫做0个或多个,那不是有没有都可以,是什么字符串不都一样么。正文的:
    楼主用了那么多的*?,那效率不是一般的低
    int i=html.indexOf("<tr bgcolor="#ffffee">");
    你直接str=html.substring(i,html.indexOf("</tr>",i));
    然后对str进行操作多好。
    然后直接
    regex=">([^\\n^\\s]+)<";就可以了吧
      

  2.   

    如果<a href='aaa.asp?'>也许有,也许没有的话。怎么取到后面的值?就是'77'那个值。
      

  3.   

    像html这样的最好别用正则,java的正则没有对平衡组的支持。用htmlparser或者xml的解析工具来的更好用和准确