正则表达式回溯到匹配中的价值

时间:2015-03-18 02:56:22

标签: regex

我有这个正则表达式

(\w*):([0-9]*).*\1:-([0-9]*) 

匹配以下字符串

start foo:100 xxxxx bar:300 yyyyy bar:-600 jjjjjj foo:-200 end

给我3组

foo
100
200

如何更改正则表达式,以便获得2个匹配项,如

foo
100
200

bar
300
600

2 个答案:

答案 0 :(得分:1)

只需将你的正则表达式置于一个积极的前瞻性断言中,这样就可以进行重叠匹配。

(?=\b(\w+)\b:([0-9]+).*\1:-([0-9]*))

DEMO

答案 1 :(得分:1)

(\w*):([0-9]+)(?=.*\1:-([0-9]*))

试试这个。一旦你捕获或向前移动正则表达式引擎就不会回溯。所以你可以捕获第一部分并将其余部分放在前瞻中并捕获它。这种方式引擎只会断言前面有类似的组但它不会前进。

参见演示。

https://regex101.com/r/bW3aR1/13