2013-04-30 130 views
1

我正在尋找一個正則表達式的Xcode,讓我之前];Xcode正則表達式替換替換「<任意數量的空白>];」

我不得不承認我在用正則表達式機率移除所有的空格&換行內更換。我得到儘可能\S(\s+)]; ...但Xcode中似乎並沒有找到任何occurances其中];是在新的一行。

這裏是什麼,我想解決兩個例子:

[self methodWithBlock:^(){ 
} ]; 

[self methodWithBlock:^(){ 
} 

      ]; 

要這樣:

[self methodWithBlock:^(){ 
}]; 

這些格式錯誤塊是學習uncrustify的結果。 ;)

+0

嘗試使用\}(\ S +)];它應該找到}和]之間的空格 – 2013-04-30 22:15:05

+0

我現在試着'\ S(\ s +)];'但Xcode沒有找到任何東西,但];與領先的空格/選項卡,但沒有換行符。我從2008年發現了一個郵件列表條目,說Xcode不能做跨線正則表達式,這仍然是真的嗎? – LearnCocos2D 2013-04-30 22:20:14

+0

BBEdit或TextWrangler是我用於複雜的正則表達式文件工作的地方。 – Dad 2013-04-30 23:35:52

回答

1

由於Xcode不能跨多行執行正則表達式,所以我分幾步分割。

首先使用正則表達式搜索&替換爲(\s+)];我感動了;到行的開頭。

然後我在文本搜索中使用了Alt + Return技巧來搜索任何]。在它前面有一個換行符。做完這個搜索後&全部替換三次];回到了他們所屬的路線的盡頭。

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;列印所有這些善良。

+0

只有一個問題:終端不提供更改的預覽。我不會運行正則表達式搜索和替換(即使是一個階段性的git回購),然後再感覺100%的正則表達式不會導致havok(或更糟糕的是:細微的不可知的代碼更改)。 – LearnCocos2D 2013-05-01 01:06:54

+0

您可以隨時將其設置爲臨時目錄並使用文件合併來查看更改。話雖如此,我通常在一個乾淨的,最新的結賬上做這種事情,這樣如果我懷疑/不高興,我可以把目錄吹走,沒有傷害,沒有犯規。因人而異。 – idz 2013-05-01 02:04:11