SCJP6正则表达式问题

时间:2013-08-22 15:34:22

标签: java regex scjp

我遇到以下示例的问题:

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]中有更多的位置,

感谢

1 个答案:

答案 0 :(得分:10)

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

因此,对于字符串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获得一个群组。