正则匹配成功后无法获取中间匹配组的问题

问题描述

我需要使用正则来匹配一组连续的数字序列中的每个数字,如以下示例

example:
1、3、5天

我期望能提取到数字:1、3和5
使用以下模式串来进行匹配

(\d{1,2})(?:.(\d{1,2}))+天

运行结果后,只获得了数字:1和5,中间的3没有获取。
调用groupCount()检查匹配数量,发现是2.

讨论数量: 3
长日将尽

你写的正则表达式本来就只有两个 group,(?:.(\d{1,2}))+天 会匹配 、3、5天(?:.(\d{1,2})) 这个模式匹配了两次,第一次匹配 、3,group (\d{1,2}) 会匹配到 3,第二次就变成 5 了,前一次匹配的内容就被覆盖了。

如果你想匹配出字符串中的数字的话,可以试试 matchAll() 之类的方法,我不知道 Java 中对应的方法叫什么,我是用 JavaScript 测试的。例如,JavaScript 代码:

let sample = "1、3、5天";
let matchArr = sample.matchAll(/\d/g);
for (let match of matchArr) {
  console.log(match[0]);
}

会输出:

1
3
5
1个月前 评论
Cookpi (楼主) 1个月前
长日将尽 (作者) 1个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!