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]()
Затем нажмите кнопку найти/заменить