代码如下:
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
为何??

解决方案 »

  1.   

    (\\d{3,5})([a-z]{2})
    这能匹配数字么
      

  2.   

    如果你调group()返回整个表达式结果为:
    123aa
    34345bb
    234cc
    但你使用了group(1),返回每个表达式是的第一组:
    123
    34345
    234
    当然,如果你用group(2),则返回:
    aa
    bb
    cc
      

  3.   

    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个数字”,不能算匹配咯