使用捕获重复组的正则表达式替换

3

我有以下Java代码片段:

def offer = new OfferBuilder().id(1)
                              .rulesId(1)
                              .secondaryRulesId(0L)
                              .code("test code")
                              .characteristics([characteristics])
                              .build()

我希望您可以用下面的Groovy代码替换它:
def offer = new Offer(id: 1, rulesId: 1, secondaryRulesId: 0L, code: "test code", characteristics: [characteristics])

我正在使用Intellij内置的正则表达式进行替换:

new (\w+)Builder\((\)\s?\.(\w+)\(([a-zA-Z0-9\" \[\]]+))+\).build\(\)

替换字符串:
new $1($3: $4)

问题在于我只能替换匹配组的最后一个出现,所以它输出:
def offer = new Offer(characteristics: [characteristics])

我一直在尝试在重复组上使用捕获,但仍然无法使其工作。请问还有什么遗漏吗?


你可以在IntelliJ论坛上得到答案。 - tim_yates
2
很遗憾,大多数正则表达式不支持你在这里想要的功能。 :( - Stephan
你需要在这里使用一种编程语言来消除正则表达式中的重复。 - Ludovic Kuty
1个回答

0

这里; 正则表达式定义;

regex :  new\s+OfferBuilder\(\)(\.[^\s]*\([^\s]*\))*

检测你的:
new OfferBuilder().id(1)
                              .rulesId(1)
                              .secondaryRulesId(0L)
                              .code("test code")
                              .characteristics([characteristics])
                              .build()

对于对象参数,请使用:

(\.[^\s]*\([^\s]*\))*

然后你解析每个匹配的参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接