import java.util.regex.*;
class Regex2 {
public static void main(String[] args) {
Pattern p = Pattern.compile(args[0]);
Matcher m = p.matcher(args[1]);
boolean b = false;
while(b = m.find()) {
System.out.print(m.start() + m.group());
}
}
}
And the command line:
java Regex2 "\d*" ab34ef输出结果为:01234456为什么

解决方案 »

  1.   

    java Regex2 "\d*" ab34ef 
    在你的输入参数中,"\d*" 应该是"\\d*" 
      

  2.   

    其实你把
    System.out.print(m.start() + m.group());
    修改成
    System.out.println(m.start() +"-"+m.group()+"-"); 
    就好像可以看出其原因了。
    修改之后的输出变成了:
    0--
    1--
    2-34-
    4--
    5--
    6--
    我们一行一行解释吧:
    \d*表示什么意思呢?表示不含或者含有不确定个数的数字。
    第1个输出0,表示输入串中的第1个字符位置,没有数字,故输出位置0;
    第2个输出1,表示输入串中的第2个字符位置,没有数字,故输出位置1;
    第3个输出234,表示输入串中的第3个字符位置,有数字,且跟随1个数字,故输出位置2,以及两位数字34即234;
    第4个输出4,表示输入串中的第5个字符位置,没数字,故输出位置4;
    第5个输出5,表示输入串中的第6个字符位置,没数字,故输出位置5;
    哈哈,最后一个我也不知道解释了。按楼主的意思,好像应该将第一个输入改成"\d+"
      

  3.   

    Partten.compile("\\d");  //这种情况下必须这样写,命令行下随OS而定
      

  4.   

    程序里面调用Partten.compile方法直接写入正则表达式时肯定是需要用双杆的,但如果是命令行传入参数就不需要了,编译器自己会识别的。
      

  5.   

    *代表零个或多个,也就是要找零个或多个的那个组,并打印他的start,
    find会在整个输入中寻找是否有匹配的子字符串,如果只为真,才会有start end 之类的方法
    楼主的group是默认的group(0)的形式,满足外大括号条件分为一组。才会有34同时输出。
    最后一个我也不知道解释了,不知道哪位高人指点一下。关注中。。
      

  6.   

    自己搞明白啦,这是正则表达式的无内容匹配,zero-length match  零长度匹配