一个小小的正则表达式的问题




各位好...

程序是:

                  Pattern p = Pattern.compile("\d{3}");

String s = "123-34345-234-12";

Matcher m = p.matcher(s);

System.out.println(m.find());

System.out.println(m.find());

System.out.println(m.find());

System.out.println(m.find());





我想问问find()语句find了之后为什么不是从"-"这个字符开始找.

而是从下个字符,也就是继续从数字开始find,

请大家不要吝啬文墨,谢谢~~
问题补充
补充:

如果说的不够清晰的话,

那么其实我的意思就是:想知道find方法的用法

他在find了之后指向什么位置?

[quote]他在find了之后指向什么位置? [/quote]
如果在字符串中查找到匹配字符序列,则指向这个字符序列的下一个字符位置,下一次find()的开始也是从这里,就是你例子中的-位置。
另外,还有一个find(int start)方法可以手动指定从什么位置开始

[quote]find()语句find了之后为什么不是从"-"这个字符开始找. [/quote]
其实就是从-之后开始找的
find()方法说明是这样的:
[quote]尝试查找与该模式匹配的输入序列的[color=red]下一个[/color]子序列。
此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。

[/quote]

你的程序可以改成这样把index打印出来看一下:
[code="java"]
Pattern p = Pattern.compile("\d{3}");
String s = "123-34345-234-12";
Matcher m = p.matcher(s);

    System.out.println(m.find());
    System.out.println(m.start());
    System.out.println(m.find());
    System.out.println(m.start());
    System.out.println(m.find());
    System.out.println(m.start());
    System.out.println(m.find());

[/code]
输出结果为:
[quote]true
0
true
[color=red]4[/color]
true
10
false[/quote]
通过那个4可以开出,是从第四个字符[color=red]“-”[/color]开始的

jones起来真早呀!! :idea: :arrow: :arrow: :arrow:

java api说的很清楚了"尝试查找与该模式匹配的输入序列的下一个子序列,此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。
".