使用XCode';s REGEX Search/Replace将()更改为{}(C+;+;11个初始值设定项)
编辑:由于我在这里问了一个更好的问题,我将此问题(通过投票结束)退出: 我正在将一些代码更新到C++11,其中包含大量的Foo()初始值设定项,这些初始值设定项应该被Foo{}替换 它不像直接搜索和替换那么简单,因为可以使用嵌套括号,例如Bar(w(“hello”)) 我正在寻找一些简单的,消除了大部分的努力。(区分何时保留()和何时切换为{}的东西将非常棘手) 我注意到Xcode支持regex搜索和替换。是否可以使用此机制替换:使用XCode';s REGEX Search/Replace将()更改为{}(C+;+;11个初始值设定项),regex,xcode,search,replace,edit,Regex,Xcode,Search,Replace,Edit,编辑:由于我在这里问了一个更好的问题,我将此问题(通过投票结束)退出: 我正在将一些代码更新到C++11,其中包含大量的Foo()初始值设定项,这些初始值设定项应该被Foo{}替换 它不像直接搜索和替换那么简单,因为可以使用嵌套括号,例如Bar(w(“hello”)) 我正在寻找一些简单的,消除了大部分的努力。(区分何时保留()和何时切换为{}的东西将非常棘手) 我注意到Xcode支持regex搜索和替换。是否可以使用此机制替换: Foo(BLAH) 与 布拉在哪里只需要平衡支架 然后,我可
Foo(BLAH)
与
布拉在哪里只需要平衡支架
然后,我可以为Foo、Bar……中的每一个运行单独的搜索和替换 您面临的一般问题是“平衡括号”,这对于大多数正则表达式实现来说是非常困难的。但是,只要您没有包含相同类型构造函数的构造函数,并且一行上没有多个构造函数: 替换
Foo\((.*)\)
与
请注意,以下模式将导致问题:
Foo(Foo()) => Foo{Foo()}
Foo(), Foo() => Foo{}
正如OP在评论中指出的,这也导致了预期输入的问题,例如:
Object( pyob, owned ) { validate(); } => Object{ pyob, owned }; }
解决这个问题的方法是使用懒惰的量词(而不是贪婪的量词)。使用惰性量词的问题是,它只会得到最里面的实例;您必须重复替换嵌套构造函数。在量词后面打问号可以使量词变懒。因此,您将替换:
Foo\((.*?)\)
与:
现在如果你有这个:
Foo(Foo())
第一次更换将产生:
Foo(Foo{})
然后,如果再次运行替换,您将获得:
Foo{Foo{}}
谢谢,现在看来这是可能的,我正在研究正则表达式语法。有没有办法绕过这些限制?我经常在一行上有多个Foo(…),例如'obx=add(Ob(3),Ob(4))PS我想你的意思是'Foo{$1}'实际上这很好。然而,它遇到了“Object(pyob,owned){validate();}”——因为它在第一个“('和最后一个“')”之间进行选择,所以它将其转换为对象{pyob,owned){validate(};})。解决这两个问题的方法是使用惰性量词(贪婪是默认值)。我将更新我的答案。
Foo(Foo())
Foo(Foo{})
Foo{Foo{}}