Eclipse, поиск и замена регулярных выражений
в eclipse можно ли использовать совпадающую строку поиска как часть строки замены при выполнении поиска и замены регулярного выражения?
В принципе, я хочу заменить все вхождения
variableName.someMethod()
С:
((TypeName)variableName.someMethod())
здесь имя_переменной может быть любое имя переменной вообще.
на sed я мог бы использовать что-то вроде:
s/[a-zA-Z]+.someMethod()/((TypeName)&)/g
то есть & представляет соответствующая строка поиска. Есть ли что-то подобное в Eclipse?
спасибо!
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, чтобы заменить все три блока только первыми двумя.
NomeN ответил правильно, но этот ответ не будет иметь большой пользы для начинающих, как я, потому что у нас будет еще одна проблема, чтобы решить, и мы не будем знать, как использовать регулярное выражение там. Поэтому я добавляю немного объяснений к этому. Ответ
поиск: (\w+\.someMethod\ (\))
заменить: ((TypeName)$1)
здесь:
в поиск:
первый и последний '(' ')' изображает группу в регулярном выражении
'\w ' изображает слова (буквенно-цифровой + подчеркивание)
' + ' изображает один или несколько(т. е. один или несколько буквенно-цифровых+подчеркивание)
'.'является специальным символом, который изображает любой символ( т. е.+ средства один или несколько символов любого характера). Потому что это особый характер чтобы изобразить '.'мы должны дать escape-символ с ним, т. е.'.-
' someMethod ' дается как его надо искать.
две круглые скобки ' ( ' ,') ' даны вместе с escape-символом потому что они являются специальными символами, которые используются для отображения группы (мы обсудим о группе в следующем пункте)
заменить на:
дано '((TypeName)$1)', здесь $1 изображает группа. То есть все символы, которые заключены в первый и последняя скобка '(' ,')' в поле поиска
также убедитесь, что вы проверили опцию 'регулярное выражение' в найдите коробку для замены
дополнительную информацию о регулярных выражениях можно найти в http://regexr.com/.
по крайней мере, в STS (SpringSource Tool Suite) группы нумеруются начиная с формы 0, поэтому заменить строку будет
replace: ((TypeName))