正则表达式“\\ d?”给出错误的输出

时间:2012-10-23 19:38:20

标签: java regex

示例代码

Pattern p = Pattern.compile("\\d?");
Matcher m = p.matcher("ab34ef");
boolean b = false;
while (m.find())
{
    System.out.print(m.start());// + m.group());
}

答案:012456

但是字符串总长度是6.那么当索引开始时,m.start如何在输出中给出6 从0开始。

2 个答案:

答案 0 :(得分:3)

\d?匹配零个或一个字符,因此它也会超出字符串的最后一个字符,作为零宽度匹配。

请注意,您的输出实际上并非由\d?获得,而是由\d*获得。您应该更改其中一个或另一个以使问题自我一致。

答案 1 :(得分:1)

\d?匹配零个或一个数字,匹配每个数字,但也匹配每个字符边界。

尝试匹配至少一个数字:

Pattern p = Pattern.compile("\\d+");