我对以下示例有疑问: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]中还有更多位置,谢谢
3 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
\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。
冉冉说
TA贡献1877条经验 获得超1个赞
如果0
索引指向“ Before a”并且2
索引位于处,34
怎么可能呢?如果0
是之前,那么岂不是3
说在指数34
?扫描仪是否在一个位置并向左看?扫描仪的位置是否在,但在之前在?
添加回答
举报
0/150
提交
取消