关于正则表达式的问题,请高手解答。

EricHxy 2004-10-25 11:14:55
下面是源文件:
<tr bgcolor="#F5F5F5">
<td height="12" width="12%" rowspan="2" bgcolor="#FFFFFF"><br>
  </td>
<td height="18" width="17%" bgcolor="#FFFFFF"><font color="#6A6AFF" face="Arial, Helvetica, sans-serif"><br>
 发布日期</font></td>
<td height="18" width="19%" bgcolor="#FFFFFF"><br>
2004-10-21</td>
<td height="18" width="15%" bgcolor="#FFFFFF"><font color="#6A6AFF" face="Arial, Helvetica, sans-serif"><br>
 有效日期</font></td>
<td height="18" width="37%" bgcolor="#FFFFFF"><br>
2004-11-20
</td>
</tr>

<tr>
<td bgcolor="#59E88E" width="80" height="20" align="right">发布日期:</td> <td bgcolor="#E8FFE8"> 2004-10-20 11:35:17</td>
<td bgcolor="#59E88E" width="80" align="right">有效期限:</td>
<td bgcolor="#E8FFE8"> 一个月</td>
</tr>

<tr><td width='20%'>发布日期:</td><td width='30%'>2004-10-19</td><td width='20%'>工作地点:</td><td>长沙市</td></tr>
...全文
189 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
EricHxy 2004-10-26
  • 打赏
  • 举报
回复
UP
EricHxy 2004-10-25
  • 打赏
  • 举报
回复
我用正则表达式:发布日期[:]*[^<]*(</[^>]*>)*[^<]*(<[^>]*>)*
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<


lukelan 2004-10-25
  • 打赏
  • 举报
回复
你这个文件与你的问题无关!
EricHxy 2004-10-25
  • 打赏
  • 举报
回复
UP
EricHxy 2004-10-25
  • 打赏
  • 举报
回复
非常感谢您的热心帮助。
实践证明,我把正则表达式中间的第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对于正则表达式的实现不同吗?
还请高手指点迷津,非常感谢。

icy_csdn 2004-10-25
  • 打赏
  • 举报
回复
当然可以把[0-9]换成\d
icy_csdn 2004-10-25
  • 打赏
  • 举报
回复
是不是这样的
[0-9]{4}-[0-9]{2}-[0-9]{2}(\W[0-9]{2}:[0-9]{2}:[0-9]{2})?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧