我有以下正则表达式
\s([^:]*)\s?r?:([0-9]+)(?=.*\1:-([0-9]*))
匹配像
这样的字符串start x.foo:100 aa x.foo:101 aa y.bar r:300 aa y.bar:-600 aa x.foo:-202 aa x.foo:-200 z.zoo:250 z.zoo:-500 end
我希望在匹配中给出内部x.foo:101和内部x.foo:-202 和外部的x.foo:100 anf x.foo:-200是另一场比赛
你能不能帮助改变正则表达式来实现这个目标
答案 0 :(得分:0)
我认为不能用一个简单的模式完成,所以我建议在循环中使用这个模式 - 取决于你的编程语言
.*?((\S+):\d+)(.*)(\2:-\d+)|.+$
并根据您的引擎替换w / $3
或\3
,您要寻找的是子模式1& 4
MATCH 1
1. [6-15] `x.foo:100`
2. [6-11] `x.foo`
3. [15-75] ` aa x.foo:101 aa y.bar r:300 aa y.bar:-600 aa x.foo:-202 aa `
4. [75-85] `x.foo:-200`
MATCH 2
1. [86-95] `z.zoo:250`
2. [86-91] `z.zoo`
3. [95-96] ` `
4. [96-106] `z.zoo:-500`
替换结果将如下所示:
` aa x.foo:101 aa y.bar r:300 aa y.bar:-600 aa x.foo:-202 aa `
现在使用结果上的相同模式运行循环将为您提供
MATCH 1
1. [4-13] `x.foo:101`
2. [4-9] `x.foo`
3. [13-46] ` aa y.bar r:300 aa y.bar:-600 aa `
4. [46-56] `x.foo:-202`
等等,请记住只使用子模式1和4,并在没有更多匹配时打破循环。