微妙的Java正则表达式

时间:2014-09-01 13:02:41

标签: java regex

String str = "1234545";
String regex = "\\d*";

Pattern p1 = Pattern.compile(regex);
Matcher m1 = p1.matcher(str);

while (m1.find()) {

    System.out.print(m1.group() + " found at index : ");
    System.out.print(m1.start());

}

此程序的输出为1234545 found at index:0 found at index:7

我的问题是:
为什么在str实际上没有空格时会打印一个空格。

1 个答案:

答案 0 :(得分:1)

"index:0""at index:7"之间打印的空格来自您打印的字符串文字。它应该在匹配的字符串之后出现;但是,在这种情况下,匹配为空。

以下是正在进行的操作:第一个匹配消耗字符串中的所有数字,为后续匹配留下零个字符。但是,以下匹配成功,因为表达式中的星号*允许匹配空字符串。

为了避免将来出现这种混淆,请在实际匹配项周围添加分隔符,如下所示:

System.out.print("'" + m1.group() + "' at index : ");

现在你会看到一对空的单引号,表明匹配是空的。