Java正则表达式问题?

如图,输出结果是什么,为什么?(主要是原因,想知道原因),求大佬,谢谢!

\\D是匹配一个非数字,\\D*是匹配0个或多个非数字,尽可能多,(\\D*)是将匹配到的所有非数字捕获到分组1以供需要时访问。

\\d是匹配一个数字,\\d+是匹配1个或多个数字,尽可能多,(\\d+)是将匹配到的所有数字捕获到分组2以供需要时访问。

.是匹配任意一个字符,.*是匹配0个或多个任意字符,尽可能多,(.*)是将匹配到的多个任意字符捕获到分组3以供需要时访问。

m.group(下标)是访问上面捕获到的分组,下标0对应整个捕获,下标1对应捕获到的分组1,下标2对应捕获到的分组2,以此类推。

所以,m.group(0)就是整个字符串,m.group(1)就是3000前面的所有字符,m.group(2)就是3000,m.group(3)就是3000后面的所有字符。追问

那个,字符不也是非数字吗,为什么不放在分组1?为什么分组1和分组3不可以互换呢

追答

分组按括号从左往右、从外往里(当括号嵌套时)计算。

分组1是匹配尽可能多的非数字,遇到第一个数字时就会停下

追问

谢谢

温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜