正则表达式的奇怪问题

zhxx_qs 2008-06-02 04:27:37

String str = "<LI>2007/03/01 </LI>";
Pattern p = Pattern.compile("<LI>([^</LI>]*)");
Matcher m = p.matcher(str);
while (m.find()) {
String value = m.group(1);
System.out.println(value);
}



为什么得到的是2007而不是2007/03/01呢?
...全文
54 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rascalboy520 2008-06-02
  • 打赏
  • 举报
回复
因为你用了("<LI>([^</LI>]*)")而不是("<LI>([^<]*)</LI>")
你得到的又是()里的东西,[^abc]是匹配不包括[]中的内容,当遇到/,就会停下来,所以你只得到了2007
如果还不明白,你可以把你代码里的部分去掉,试下Pattern p = Pattern.compile("<LI>([^<]*)");
看看得到的是不是你想要的结果,就会明白加上/和不加/的区别
zhxx_qs 2008-06-02
  • 打赏
  • 举报
回复
samboy2002正解
谢谢各位热心解答!
北京-李大鹏 2008-06-02
  • 打赏
  • 举报
回复
主要是这个:[^</LI>]*

[]在正则表达式中表示包含的字符,如[abc]表示字符串中包含a或b或c,加上^后表示不包含指定字符。

[^</LI>]就表示不包含< / L I >这几个字符。

当匹配2007/03/01时,遇到/时,正则表达式认为不包含该字符,所以只返回2007而不是2007/03/01
吐司vivi 2008-06-02
  • 打赏
  • 举报
回复
应该是“/”这个符号吧!是不是得转义一下 正则不是很熟
zhxx_qs 2008-06-02
  • 打赏
  • 举报
回复
谢谢楼上的, 可是我是想知道这个正则表达式有什么错误
vincent343425185 2008-06-02
  • 打赏
  • 举报
回复
System.out.println("<LI>2007/03/01 </LI>".replaceAll("<LI>|</LI>", " "));

62,614

社区成员

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

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