Xcode正则表达式替换为替换“<any number =”“of =”“whitespace =”“>];”</any>

时间:2013-04-30 22:04:49

标签: regex xcode replace

我正在寻找Xcode中的正则表达式替换,它允许我删除所有空格&amp; ];

之前的换行符

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

以下是我想要解决的两个例子:

[self methodWithBlock:^(){
} ];

[self methodWithBlock:^(){
} 

          ];

对此:

[self methodWithBlock:^(){
}];

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

现在./ununcrustify.pl filename.m会在stdout上吐出你处理过的文件。将其重定向到临时文件。差异以确保您满意然后替换旧文件。

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

工作原理

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

答案 1 :(得分:1)

由于Xcode无法在多行中执行正则表达式,因此我将其分为几个步骤。

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

然后我在文本搜索中使用Alt + Return技巧来搜索任何];在它前面有一个换行符。在做了这个搜索&amp;全部更换三次];他们回到了他们所属的那条线的尽头。