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


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

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

variableName.someMethod()

С:

((TypeName)variableName.someMethod())

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

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

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

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

спасибо!

6 104

6 ответов:

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

так:

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

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

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

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

from checks import checklist(_list):

...с...

from checks import checklist



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

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

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

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

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



Screenshot

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

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

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

здесь:

в поиск:

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

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

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

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

  • ' someMethod ' дается как его надо искать.

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

заменить на:

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

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

дополнительную информацию о регулярных выражениях можно найти в http://regexr.com/.

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

replace: ((TypeName))

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

enter image description here

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

/download.mp4^lecture_id=271

до

/271.mp4

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

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

enter image description here

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

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

^\s * \r?\n

и заменить на

\n

просто используйте это в Мастере поиска и замены, он будет работать на 100%.