Найти / заменить в Eclipse регулярным выражением - PullRequest
1 голос
/ 29 декабря 2011

мне нужно заменить

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

где name, numberX и прочее_ здесь есть часть, которую я хочу сохранить

с

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, потому что я до сих пор не знаю, какой это будет индекс, кроме того, я не знаю, как обращаться с}; к}) ;. Я должен получить stuff_here до} ;, потому что это единственный разделитель, который дает мне возможность поймать все, но я не знаю, как поставить скобки между ними ..

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

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

1 Ответ

1 голос
/ 03 января 2012

Я сделал это в 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
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...