SCJP6 regex issue

I have issue with following example:

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

And the command line:

java Regex2 "d*" ab34ef

Can someone explain me, why the result is: 01234456

regex pattern is d* - it means number one or more but there are more positions that in args[1],

thanks


d* matches 0 or more digits. So, it will even match empty string before every character and after the last character. First before index 0 , then before index 1 , and so on.

So, for string ab34ef , it matches following groups:

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)

If you use d+ , then you will get just a single group at 34 .

链接地址: http://www.djcxy.com/p/76926.html

上一篇: 如何让我的匹配在vim中不贪心?

下一篇: SCJP6正则表达式问题