一个关于Matcher类group()方法的问题

龙我雷 2010-04-06 02:24:38
代码如下:
Pattern p= Pattern.compile("(\\d{3,5})([a-z]{2})");
Matcher m = p.matcher("111-123aa-34345bb-234cc-111");
while(m.find())
{
System.out.println(m.group(1));
}
按照对于API的理解,其结果应该是
111
123
34345
234
111
但是实际结果却是
123
34345
234
为何??
...全文
1161 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
eggno8 2010-04-06
  • 打赏
  • 举报
回复
Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})?");
这样才是你想得到
111
123
34345
234
111
的效果。group(2)那部分或者有或者null
之前你写的Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");
那是“3-5个数字后面必须跟着2个小写字母”,当然111那种“只有3个数字”,不能算匹配咯
pwl2014 2010-04-06
  • 打赏
  • 举报
回复
如果你调group()返回整个表达式结果为:
123aa
34345bb
234cc
但你使用了group(1),返回每个表达式是的第一组:
123
34345
234
当然,如果你用group(2),则返回:
aa
bb
cc
yaoweijq 2010-04-06
  • 打赏
  • 举报
回复
(\\d{3,5})([a-z]{2})
这能匹配数字么。。。
lgwinym 2010-04-06
  • 打赏
  • 举报
回复
坐等高人解决问题

62,614

社区成员

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

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