被匹配的字符串如下:<tr bgcolor="#ffffee">
    <td align="center">上海</td>
    <td align="left">0</td>
    <td align="left"><a href='aaa.asp?'>77</a></td>
</tr>
<a href='aaa.asp?'>也许有,也许没有。用<a href.*?>{0,1}这种方式匹配行吗?

解决方案 »

  1.   

    不行,会贪婪的把“>77</a></td”也匹配进去。
    这样试试: String str = "<td align=\"left\"><a href='aaa.asp?'>77</a></td>";
    Pattern pattern = Pattern.compile("(<a href[^>]*?>)");
    Matcher m = pattern.matcher(str);
    while(m.find())
    {
        System.out.println(m.group(1));
    }
      

  2.   

    我这样写的,好像没找到。<a href='aaa.asp?'>有或者没有,都能匹配到77吗?String regex = "(?s)<tr bgcolor=\"#ffffee\"(?:.(?!<tr))*?
    (?:\\s*<td.*?>(.*?)</td>\\s*)
    (?:\\s*<td.*?>(.*?)</td>\\s*)
    (?:\\s*<td.*?><a href[^>].*?>(.*?)</a></td>\\s*).*?</tr>";        String data1,data2,data3;
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(AllTXT);
            while (matcher.find()) {
              data1 = matcher.group(1);
              data2 = matcher.group(2);
              data3 = matcher.group(3);
            }
      

  3.   

    楼主怎么还在问这个问题啊,上次就说过一次这种html的用java的正则去匹配不是很准确的而且很麻烦,因为java中的正则没有对平衡组的支持,最好的就是用html或xml的解析工具
      

  4.   

    改成html解析的要整个项目重做,不止换正则表达式这个简单。怎么写能匹配0个或多个<a href='aaa.asp?'>呢?再有里面的链接也会变也许是<a href='bbb.asp?'>。(<a href.*?>)?这样写能匹配,但是用圆括号就把值取出来了,用方括号是匹配任意字符。怎么写能匹配整个<a href='aaa.asp?'>0次或1次呢?
      

  5.   

    用的是while循环啊,多个也可以匹配的。
      

  6.   

    用replaceall(正则,替换后的内容)