2015-10-14 34 views
1

我有形式的大約200個函數調用Java的正則表達式的嵌套函數調用

markers.add(packageDecl.getPosition(), "package.invalid", this.fullName); 

這就需要與

markers.add(I18n.createMarker(packageDecl.getPosition(), "package.invalid", this.fullName)); 
      ^^^^^^^^^^^^^^^^^^               ^

更換它們可以具有的功能參數和參數的任意數可以是嵌套調用,如示例中所示。但是,;總是以換行符結束。


我已經嘗試過此正則表達式:

markers\.add\((.*)$ 

,讓我脫光了markers.add(部分並添加I18n.createMarker(。但是,我不能在最後添加額外的右括號:); ->));

回答

1

你能不能用這個:

Regex: markers\.add\((.*)\)" 
Replace: markers.add(I18n.createMarker(\1)) 
0

醜陋的東西似乎與Eclipse正則表達式查找工作:

markers\.add\((.|\n)*;$ 
+0

你應該看看了DOTALL模式在Java正則表達式的文檔。沒有必要像'(。| \ n)'這樣的黑客。 –

+0

@AlanMoore我知道正則表達式的標誌,但我不認爲在評論中提到的正則表達式搜索/替換Clashsoft支持它們。我錯了嗎? – Aaron

+1

這個問題被標記爲[tag:java],所以我認爲它是用於Java代碼的,他只用Eclipse進行測試。但無論如何,Eclipse本身使用ICU庫,它具有與Java風格(故意的設計選擇)幾乎完全相同的語法和語義。噢,'(。| \ n)'還有另一個問題'。還有其他幾行「。」不匹配的行分隔符,因此在技術上,您應該已經使用過。 '(|。[\ r \ n \ u0085 \ u2028 \ u2029])'。如果你正在走這條路。你不應該這樣做。 –