Eclipse, поиск и замена регулярных выражений

В eclipse можно ли использовать согласованную строку поиска как часть строки замены при выполнении поиска и замены регулярного выражения?

В принципе, я хочу заменить все вхождения

variableName.someMethod()

с:

((TypeName)variableName.someMethod())

Где variableName может быть любым именем переменной вообще.

В sed я мог бы использовать что-то вроде:

s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g

То есть, и представляет согласованную строку поиска. Есть ли что-то подобное в Eclipse?

Спасибо!

Ответ 1

Да, "()" захватывает группу. Вы можете использовать его снова с $ i, где я - i-я группа захвата.

Так:

поиск: (\w+\.someMethod\(\))

заменить: ((TypeName)$1)

Подсказка: CTRL + Space в текстовых полях дает вам всевозможные предложения для написания регулярных выражений.

Ответ 2

Использование...
поиск = (^. * импорт) (. *) (\ (. * \):)
replace = $1 $2

... заменяет...

from checks import checklist(_list):

... с...

from checks import checklist



Блоки в регулярном выражении обозначаются скобками (которым не предшествует "\" )

(^. * import) находит "из импорта чеков" и загружает его в 1 доллар (начало затмения начинается с 1)

(. *) найдите следующее "все", пока не наступит следующее "(" и загрузит его до $2. $2 остановки в "(" из-за следующей части (см. следующую строку ниже)

(\ (. * \):) говорит "при первом столкновении" ( "после запуска блока $2... остановить блок $2 и начать $3. $3 загружается с помощью" ( "любой текст" ): "или, в Например," (_list):"

Затем в замене просто поставьте $1 $2, чтобы заменить все три блока только двумя первыми.



Screenshot

Ответ 3

NomeN ответил правильно, но этот ответ не был бы очень полезен для начинающих, таких как я, потому что у нас будет другая проблема, и мы не будем" t умеет использовать RegEx там. Поэтому я добавляю немного объяснения этому. Ответ

search: (\ w + \. someMethod\(\))

replace: ((TypeName) $1)

Здесь:

В поиске:

  • Первый и последний '(' ')' отображает группу в регулярном выражении

  • '\ w' отображает слова (буквенно-цифровые + подчеркивание)

  • '+' отображает один или несколько (то есть один или несколько буквенно-цифровых символов + подчеркивание)

  • '' является особым символом, который изображает любой символ (т.е. + означает один или несколько символов). Потому что это особый символ изобразить '.' мы должны дать ему escape-символ, т.е. '.'

  • 'someMethod' задается так, как нужно искать.

  • Две скобки '(', ')' задаются вместе с escape-символом потому что они являются особым символом, который используется для отображения группы (мы обсудим группу в следующей точке)

Взамен:

  • Дается ' ((TypeName) $1)', здесь $1 изображает группа. Это все символы, которые заключены в первый и последняя скобка '(', ')' в поле поиска

  • Также убедитесь, что вы проверили опцию "Регулярное выражение" в найти блок замены

Более подробную информацию о RegEx можно найти в http://regexr.com/.

Ответ 4

По крайней мере, в STS (SpringSource Tool Suite) группы нумеруются начиная с формы 0, поэтому заменить строку будет

replace: ((TypeName)$0)

Ответ 5

Для тех, кому нужно объяснение и пример использования regxp в Eclipse. Вот мой пример, иллюстрирующий проблему.

enter image description here

Я хочу переименовать

/download.mp4^lecture_id=271

в

/271.mp4

И их может быть несколько.

Вот как это должно быть сделано.

enter image description here

Затем нажмите кнопку найти/заменить