2011-12-29 4 views
1

мне нужно заменитьНайти/Заменить в Eclipse, с регулярным выражением

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

где имя, 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)*\)\) 

и то, что я думаю, что я нужно использовать, чтобы Заменяйте его

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

я поставил $ X, потому что я до сих пор не знаю, что индекс будет , кроме того, я не знаю, как обращаться с}; to}) ;. Я должен получить stuff_here до} ;, потому что это единственный разделитель, который дает мне все, чтобы поймать все, но я не знаю, как установить скобки между ними.

Я только что начал сегодня искать объявления regex, так что я полный noob в этой области.

Вы можете мне помочь?

ответ

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?) Флаг означает, что точка (.) может быть сопоставлена ​​с новым символом линии
  • есть одно предположение ption здесь: последовательность }; не должна появляться в блоке 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

Спасибо за ответ! (Un), к счастью, я не могу попробовать, так как я уже заменил его вручную. Да, это было немного утомительно, но он не украл больше 1 часа, и поскольку у меня не было ответа, я решил сделать это вручную. Мне любопытно, можете ли вы сказать мне, как заменить stuff_here, даже если это имеет}; внутри его ... –

+0

@Makers_F Я думаю, что это будет сложно. Вам нужно будет написать регулярное выражение для соответствия скобок. Регулярные выражения предназначены для определения регулярных грамматик (http://en.wikipedia.org/wiki/Regular_grammar), а грамматика «скобки» не является регулярной. Но, может быть, я что-то упустил. – ynka

Смежные вопросы