import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
  
  
public class Test {  
      
    public static void main(String [] args){  
        Pattern p = Pattern.compile("\\d*");  
        Matcher m = p.matcher("ab34ef");  
        while(m.find()){  
            System.out.println(m.start()+":"+m.group());  
        }  
    }  
}  
输出的结果:
0:
1:
2:34
4:
5:
6:各位大侠,ab34ef 最大的下标只是到 5 啊? 为什么会有6出现呢?
谢谢各位!

解决方案 »

  1.   

    一样的问题吧,呵呵http://topic.csdn.net/u/20080702/23/1bb7758f-e23c-42ab-9f00-7a517ffc6a3c.html
      

  2.   

    6就是匹配指示器在f的后面了。这个就像是String的subString 方法一样。String str = "ab34ef";显示匹配指示器从0开始,
    相当于 str.substring(0,1);//这里0也就是你的m.start()的值
    因为a不能符合,所以匹配0宽度的字符。
    继续想后str.substring(1,2);
    b也不符合。
    匹配指示器继续下移。
    str.substring(2,3);
    这时候取出3,是符合的。
    但由于有*,所以向后,4也匹配,
    其实这时候m.end()移动到4的后面
    也就相当于str.substring(2,4);
    所以输出2:34然后匹配指示器下移,
    str.substring(4,5);
    是e,所以匹配0宽度的字符。str.substring(5,6);
    是f,所以匹配0宽度字符。然后匹配指示器继续下移,
    m.start()在6的位置,
    由于没有别的字符,所以还是匹配0宽度字符。以上是我理解的,希望没有误导你!
      

  3.   

    你换成Pattern p = Pattern.compile("\\d+"); 就好了