3

我对以下示例有疑问:

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());
        }
    }
}

和命令行:

java Regex2 "\d*" ab34ef

有人可以向我解释一下,为什么结果是:01234456

正则表达式模式是 d* - 它表示第一个或多个,但在 args[1] 中有更多位置,

谢谢

4

1 回答 1

10

\d*匹配 0 个或多个数字。因此,它甚至会在每个字符之前和最后一个字符之后匹配空字符串。首先在 index 之前0,然后在 index 之前1,依此类推。

因此,对于 string ab34ef,它匹配以下组:

Index    Group
  0        ""  (Before a)
  1        ""  (Before b)
  2        34  (Matches more than 0 digits this time)
  4        ""  (Before `e` at index 4)
  5        ""  (Before f)
  6        ""  (At the end, after f)

如果你使用\\d+,那么你将只得到一个组34

于 2013-08-22T15:35:37.780 回答