问答 / 2 / 3 / 创建于 11个月前
我需要使用正则来匹配一组连续的数字序列中的每个数字,如以下示例
example:1、3、5天
我期望能提取到数字:1、3和5使用以下模式串来进行匹配
(\d{1,2})(?:.(\d{1,2}))+天
运行结果后,只获得了数字:1和5,中间的3没有获取。调用groupCount()检查匹配数量,发现是2.
你写的正则表达式本来就只有两个 group,(?:.(\d{1,2}))+天 会匹配 、3、5天,(?:.(\d{1,2})) 这个模式匹配了两次,第一次匹配 、3,group (\d{1,2}) 会匹配到 3,第二次就变成 5 了,前一次匹配的内容就被覆盖了。
(?:.(\d{1,2}))+天
、3、5天
(?:.(\d{1,2}))
、3
(\d{1,2})
3
5
如果你想匹配出字符串中的数字的话,可以试试 matchAll() 之类的方法,我不知道 Java 中对应的方法叫什么,我是用 JavaScript 测试的。例如,JavaScript 代码:
matchAll()
let sample = "1、3、5天"; let matchArr = sample.matchAll(/\d/g); for (let match of matchArr) { console.log(match[0]); }
会输出:
1 3 5
find
我要举报该,理由是:
你写的正则表达式本来就只有两个 group,
(?:.(\d{1,2}))+天
会匹配、3、5天
,(?:.(\d{1,2}))
这个模式匹配了两次,第一次匹配、3
,group(\d{1,2})
会匹配到3
,第二次就变成5
了,前一次匹配的内容就被覆盖了。如果你想匹配出字符串中的数字的话,可以试试
matchAll()
之类的方法,我不知道 Java 中对应的方法叫什么,我是用 JavaScript 测试的。例如,JavaScript 代码:会输出: