如何让正则匹配的单个字符可同时属于多个匹配结果
正则匹配允许单个字符重复参与多个匹配的解决方案
问题原因
默认正则匹配为消耗型模式:单次匹配完成后,匹配指针会直接跳转至当前匹配结果的末尾,不再回溯复用已匹配过的字符。
你原有正则1(0+)1匹配字符串1010010001时,第一个匹配结果101会消耗掉前3位字符,指针直接落在第3位(索引从0开始计数),原本作为第一个匹配结尾的1无法再作为第二个匹配的开头使用,因此漏过了1001的匹配。
解决方案
使用零宽正向前瞻+捕获组的写法,正则修改为:(?=(10+1))
提取所有捕获组1的内容,即可得到你预期的3个结果:101、1001、10001。
实现原理
(?=...)为零宽正向前瞻语法,仅检查当前位置后方的字符串是否符合规则,不会消耗任何字符,匹配完成后指针仅向后移动1位继续检查,不会跳转到匹配内容末尾- 内部括号
(10+1)为捕获组,会将前瞻到的符合规则的字符串存入分组1 - 匹配过程会逐位扫描整个字符串:索引0位置前瞻到
101存入分组,索引2位置前瞻到1001存入分组,索引5位置前瞻到10001存入分组,最终得到全部预期结果。
注意事项
该写法的全匹配结果为空字符串,你需要自行提取所有捕获组1的内容作为最终匹配结果。
内容的提问来源于stack exchange,提问作者Ali Faris
相关产品推荐
相关产品推荐

