2009-09-03 5 views
101

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

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

variableName.someMethod() 

с:

((TypeName)variableName.someMethod()) 

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

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

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

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

Спасибо!

+0

Хорошая документация по Eclipse RegEx: http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.jubula.client.ua.help%2Fhtml%2Freference%2Fnode4.html –

ответ

201

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

так:

search: (\w+\.someMethod\(\)) 
replace: ((TypeName)$1) 

подсказка: CTRL + пробел в текстовых полях дает вам все виды предложений по регулярному выражению писать. (Я боюсь, что клавиша «вниз», чтобы перейти к списку предложений, удалит ваш ввод в текстовое поле.) Раздражает небольшую ошибку.

+1

it no работает для moi :( – kellogs

+12

Отличный ответ, особенно подсказка - дополнительная оценка :) –

+0

Это хороший ответ и полезный намек. Было бы более полезно, если бы это было описано более подробно. – iammilind

2

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

replace: ((TypeName)$0) 
+5

Это неправда афайк. $ 0 представляет собой весь исходный поисковый запрос. В этом случае я предполагаю, что это будет работать по совпадению. –

0

Для кого-то нужно объяснение и пример того, как использовать regx on eclipse, надеюсь, что это будет полезно. Вот моя проблема.

enter image description here

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

/download.mp4^lecture_id=271 

в

/271.mp4 

А может быть много из них.

Как вы должны это делать.

enter image description here

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

6

, используя ...
поиск = (^. * Импорт) (. *) (\ (. * \) :)
replace = $ 1 $ 2

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

from checks import checklist(_list): 

... с ...

from checks import checklist 



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

(^. * импорт) находит «из импорта чеков» и загружает его до 1 доллара США (затмение начинается с 1)

(. *) найти следующее «все» до следующей встречи («и загружает его до 2 долларов США». $ 2 останавливается на "(" из-за следующей части (см. Следующую строку ниже)

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

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



Screenshot

2

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

поиск: (\ ш + \ SomeMethod \ (\).)

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

Здесь:

В поисках:

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

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

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

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

  • 'someMethod' дается как и для поиска.

  • Два скобки «(», «)» приведены вместе с экранирующим символом , потому что они особый характером, которые используются для описания группы (мы обсудим о группе в следующей точке)

В замене:

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

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

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

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