2011-12-29 42 views
1

替換我需要更換查找/ Eclipse中使用正則表達式

Sprite name = new Sprite(number1, number2, this.mScritteRegion.get(number3) 
{ 
    stuff_here 
}; 

其中name,numberX和stuff_here是我要保持

RectangularShape name = mLanguageManager.getSpriteWithText(number1, number2, 0, 0, "", getResources.getString(R.string.), mLanguageManager.getFont("main_font"), new IOnAreaTouched() 
{ 
     stuff_here 
}); 

到目前爲止,部分我用正則表達式來找到代碼的第一部分,但我不能選擇新行+ {+ stuff_here +};

這裏正則表達式

Sprite (\w)* = new Sprite\((\d)*(\s)*,(\s)*(\d)*(\s)*,(\s)*this.mScritteRegion.get\((\d)*\)\) 

,什麼我想我會需要使用replce它

RectangularShape $1 = mLanguageManager.getSpriteWithText\($2, $5, 0, 0, "", getResources.getString\(R.string.\), mLanguageManager.getFont\("main_font"\), new IOnAreaTouched\(\) $X\) 

我把$ X,因爲我仍然不知道它會是什麼指數,另外我不知道如何處理};至 });。我必須得到stuff_here直到},因爲它是唯一允許我捕捉所有內容的分隔符,但我不知道如何將圓括號放在它們之間..

我今天剛剛開始查看廣告正則表達式,所以我是在這個領域的總noobot ..

你能幫助我嗎?

回答

1

我在NetBeans中這樣做了,我認爲正則表達式必須看起來相同,也許替換字符不同(我將檢查何時可以使用Eclipse訪問計算機)。

趕上你的第一個字符串的正則表達式是:

(?s)Sprite (\w+) = new Sprite\((\w+), (\w+),.*?(.\{.*?\}); 

取代正則表達式是

RectangularShape $1 = mLanguageManager.getSpriteWithText($2, $3, 0, 0, "", getResources.getString(R.string.), mLanguageManager.getFont("main_font"), new IOnAreaTouched()$4); 

一個幾句話:

  • 旗指(S?)點(。)可以匹配新行字符
  • 有一個數字點擊此處:};序列不能出現在stuff_here
  • 此轉換在簽名末尾丟失新行字符 - 語義雖然相同,但可以使用格式化模板將其帶回。

因此,源是:

Sprite name = new Sprite(number1, number2, this.mScritteRegion.get(number3) 
{ 
    stuff_here 
}; 

我得到:

RectangularShape name = mLanguageManager.getSpriteWithText(number1, number2, 0, 0, "", getResources.getString(R.string.), mLanguageManager.getFont("main_font"), new IOnAreaTouched() { 
     stuff_here 
    }); 
+0

感謝您的回答! (聯合國)幸運的是我不能嘗試它,因爲我已經手工取代它。是的,這有點乏味,但它沒有偷走超過1小時,因爲我沒有迴應,我決定用手工做。我很好奇,如果你能告訴我如何替換stuff_here即使它具有 };在裏面... – 2012-01-04 00:50:57

+0

@Makers_F我認爲這將是困難的。您需要爲匹配的括號編寫正則表達式。正則表達式旨在定義常規語法(http://en.wikipedia.org/wiki/Regular_grammar),而「括號」語法不規則。但也許我錯過了一些東西。 – ynka 2012-01-04 21:24:35