Regexp捕获具有共同字符的组

时间:2017-06-14 23:26:53

标签: java regex

我正在尝试匹配句子中匹配正则表达式的所有组,但这些组在句子中有共同的字符。 我正面临这个问题: 例如,在这句话中:

  

A + B + C + D

我想说明一下:

A + B

然后

B + C

然后

C + D

使用java.utils.regex.Matcher.find(带有模式([A-Z] \+ [A-Z]) regex101) 它只在最后一个匹配的字符后开始匹配下一组,所以我只匹配A + B然后匹配C + D.

有没有办法用正则表达式做到这一点?

1 个答案:

答案 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