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

98

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

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

variableName.someMethod()

с:

((TypeName)variableName.someMethod())

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

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

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

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

Спасибо!

Теги:
replace

5 ответов

195
Лучший ответ

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

так:

search: (\w+\.someMethod\(\))
replace: ((TypeName)$1)
Подсказка

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

  • 1
    это не работает для меня :(
  • 15
    Отличный ответ, особенно подсказка, стоит лишнее очко :)
Показать ещё 5 комментариев
6

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

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

from checks import checklist(_list):

... с...

from checks import checklist



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

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

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

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

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



Изображение 4776

2

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

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

replace: ((TypeName) $1)

Здесь:

В поиске:

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

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

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

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

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

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

Взамен:

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

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

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

2

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

replace: ((TypeName)$0)
  • 5
    Это не правда, афаик. $ 0 представляет весь исходный поисковый запрос. В этом случае я думаю, что это будет работать по совпадению, хотя.
0

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

Изображение 4777

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

/download.mp4^lecture_id=271

to

/271.mp4

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

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

Изображение 4778

Затем нажмите кнопку поиска/замены

Ещё вопросы

Сообщество Overcoder
Наверх
Меню