1

我正在 Xcode 中寻找一个正则表达式替换,它允许我之前删除所有空格和换行符];

我不得不承认我与正则表达式不一致。我做到了\S(\s+)];……但Xcode似乎没有发现任何出现];在新行上的情况。

这是我要修复的两个示例:

[self methodWithBlock:^(){
} ];

[self methodWithBlock:^(){
} 

          ];

对此:

[self methodWithBlock:^(){
}];

那些格式错误的块是学习 unrustify 的结果。;)

4

2 回答 2

2

当我遇到这样的问题(即 Xcode 不会跨多行执行正则表达式)时,我很高兴我总能弹出到终端并使用命令行。

在您最喜欢的文本编辑器中创建以下内容......让我们称之为ununcrustify.pl

#!/usr/bin/perl
$/ = undef; 
$file = <>;
$file =~ s/\}\s+\]/}]/g;
print $file;

不要忘记使文件可执行(chmod o+x ununcrustify.pl)。

现在./ununcrustify.pl filename.m将在标准输出上吐出您处理过的文件。将其重定向到临时文件。diff 以确保您满意,然后替换旧文件。

如果您有许多文件要处理,我怀疑这将比您提出的多步骤解决方案更有效。

这个怎么运作

$/ = undef;取消定义行尾分隔符,这导致 $file = <>;将整个文件作为一个长字符串读入内存,允许$file =~ s/\}\s+\]/}]/g;将整个文件作为一个长字符串进行操作,最后print $file;将所有这些优点打印出来。

于 2013-04-30T22:49:09.630 回答
1

由于 Xcode 不能跨多行执行正则表达式,因此我将其拆分为几个步骤。

首先使用正则表达式搜索并替换为(\s+)];我移动了 ]; 到行首。

然后我在文本搜索中使用了 Alt+Return 技巧来搜索任何 ]; 前面有一个换行符。完成此搜索并全部替换三遍]; 回到了他们所属的队伍的末端。

于 2013-04-30T22:33:40.830 回答