我用正则表达式:发布日期[:]*[^<]*(</[^>]*>)*[^<]*(<[^>]*>)*
JAVA找到3处:
1处:发布日期</font></td>          <td height="18" width="19%" bgcolor="#FFFFFF"><br>2处:发布日期:</td>              <td bgcolor="#E8FFE8">3处:发布日期:</td><td width='30%'>
但是,如果我把表达式改成这样:发布日期[:]*[^<]*(</[^>]*>)*[^<]*(<[^>]*>)*\\s*([^<]*)<
JAVA找到的也是3处:
1处:发布日期</font></td>          <td height="18" width="19%" bgcolor="#FFFFFF"><br>            2004-10-21<2处:发布日期:</td>              <3处:发布日期:</td><td width='30%'>2004-10-19<
因为我需要找到日期字符串,而第2处找到的范围居然缩小了!
请问这是为什么呢?我如何才能让第2处的范围包括日期字符串呢?
也就是说,我希望找到的是:
1处:发布日期</font></td>          <td height="18" width="19%" bgcolor="#FFFFFF"><br>            2004-10-21<2处:发布日期:</td>              <td bgcolor="#E8FFE8"> 2004-10-20 11:35:17<3处:发布日期:</td><td width='30%'>2004-10-19<

解决方案 »

  1.   

    非常感谢您的热心帮助。
    实践证明,我把正则表达式中间的第3组改为您说的样子,还是没有找到需要的日期字符串。
    也就是说,我把
    发布日期[:]*[^<]*(</[^>]*>)*[^<]*(<[^>]*>)*\\s*([^<]*)<
    改成了:
    发布日期[:]*[^<]*(</[^>]*>)*[^<]*(<[^>]*>)*\\s*[0-9]{4}-[0-9]{2}-[0-9]{2}
    还是解决不了问题,第二处仍然没有匹配。其实,我已经用The Regulator(http://royo.is-a-geek.com/iserializable/regulator/)测试过这个表达式:
    发布日期[:]*[^<]*(</[^>]*>)*[^<]*(<[^>]*>)*\\s*([^<]*)<
    我发现其匹配结果确实就是我想要的。
    但是,一旦采用JAVA来实现,结果就变了,是不是JAVA对于正则表达式的实现不同吗?
    还请高手指点迷津,非常感谢。