Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XCode';s REGEX Search/Replace将()更改为{}(C+;+;11个初始值设定项)_Regex_Xcode_Search_Replace_Edit - Fatal编程技术网

使用XCode';s REGEX Search/Replace将()更改为{}(C+;+;11个初始值设定项)

使用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) 与 布拉在哪里只需要平衡支架 然后,我可

编辑:由于我在这里问了一个更好的问题,我将此问题(通过投票结束)退出:

我正在将一些代码更新到C++11,其中包含大量的Foo()初始值设定项,这些初始值设定项应该被Foo{}替换

它不像直接搜索和替换那么简单,因为可以使用嵌套括号,例如Bar(w(“hello”))

我正在寻找一些简单的,消除了大部分的努力。(区分何时保留()和何时切换为{}的东西将非常棘手)

我注意到Xcode支持regex搜索和替换。是否可以使用此机制替换:

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{}}