猿问

SCJP6正则表达式问题

我对以下示例有疑问:


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


谢谢


PIPIONE
浏览 563回答 3
3回答

慕尼黑5688855

\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。

慕的地8271018

不,*表示零或更多。+表示一个或多个。

冉冉说

如果0索引指向“ Before a”并且2索引位于处,34怎么可能呢?如果0是之前,那么岂不是3说在指数34?扫描仪是否在一个位置并向左看?扫描仪的位置是否在,但在之前在?
随时随地看视频慕课网APP
我要回答