为了账号安全,请及时绑定邮箱和手机立即绑定

SCJP6正则表达式问题

SCJP6正则表达式问题

PIPIONE 2019-09-27 15:58:13
我对以下示例有疑问: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。


查看完整回答
反对 回复 2019-09-27
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-09-27
?
冉冉说

TA贡献1877条经验 获得超1个赞

如果0索引指向“ Before a”并且2索引位于处,34怎么可能呢?如果0之前,那么岂不是3说在指数34?扫描仪是否在一个位置并向左看?扫描仪的位置是否在,但在之前在

查看完整回答
反对 回复 2019-09-27
  • 3 回答
  • 0 关注
  • 522 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信