regex 是否有正则表达式或其他工具可以用来将方法调用更改为包含前面表达式的函数调用?

rbl8hiat  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(137)

我正在对一个大型C++代码库进行更改,需要将方法调用更改为等效的函数调用,例如,someExpression.foo()变为bar(someExpression)
下面再举几个例子来说明我正在寻找的这种转变:

  • (itemA + itemB).foo()变为bar(itemA + itemB)
  • outerFunction(object->method(), arg2 + val, innerFunction(arg3)).foo()变为bar(outerFunction(object->method(), arg2 + val, innerFunction(arg3)))

基本上,对foo()方法调用的表达式可能相当复杂。但是foo()在我的代码库中出现了很多次,所以我真的希望有某种方法可以自动进行这种更改,而不必费力地手动编辑所有内容。
这可以用正则表达式来完成吗?或者有没有其他工具可以用来做这个改变?

hmmo2u0o

hmmo2u0o1#

我根据this answer.中的非递归括号平衡正则表达式,拼凑了一个到目前为止似乎可以工作的正则表达式

([^\s\(]*(?:\((?:[^)(]|\((?:[^)(]|\((?:[^)(]|\([^)(]*\))*\))*\))*\))?)\.foo\(\)

这将不会匹配任何有效的表达式前面.foo(),但将匹配他们中的大多数。可能有错误与此正则表达式,但我还没有发现任何或命中任何不匹配到目前为止。它包含一个捕获组,可用于替换,即:bar(\1)
我将把这个问题留到后面,因为几乎可以肯定,还有比这个更好的方法。

相关问题