我正在尝试匹配句子中匹配正则表达式的所有组,但这些组在句子中有共同的字符。 我正面临这个问题: 例如,在这句话中:
A + B + C + D
我想说明一下:
A + B
然后
B + C
然后
C + D
使用java.utils.regex.Matcher.find(带有模式([A-Z] \+ [A-Z])
regex101)
它只在最后一个匹配的字符后开始匹配下一组,所以我只匹配A + B然后匹配C + D.
有没有办法用正则表达式做到这一点?
答案 0 :(得分:3)
我会在一个前瞻中匹配,然后消耗1.
全球查找(?=([A-Z]\s*\+\s*[A-Z]))[A-Z]
每组匹配打印组1或只获得一个数组。
通过匹配与消费重叠工作
在断言中匹配超过你需要的东西,然后消耗更少。
消费重新定位下一场比赛的开始。
此过程使其重叠。
扩展
(?=
( [A-Z] \s* \+ \s* [A-Z] ) # (1)
)
[A-Z]
匹配
** Grp 1 - ( pos 0 , len 5 )
A + B
** Grp 1 - ( pos 4 , len 5 )
B + C
** Grp 1 - ( pos 8 , len 5 )
C + D