Eclipse, поиск и замена регулярных выражений
В eclipse можно ли использовать совпадающую строку поиска как часть строки замены при выполнении поиска и замены регулярного выражения?
В принципе, я хочу заменить все вхождения
variableName.someMethod()
С:
((TypeName)variableName.someMethod())
Где variableName может быть любым именем переменной вообще.
В sed я мог бы использовать что-то вроде:
s/[a-zA-Z]+.someMethod()/((TypeName)&)/g
То есть, & представляет совпадающую строку поиска. Есть ли что-то подобное в Затмение?
Спасибо!
6 ответов:
Да, "() " захватывает группу. вы можете использовать его снова с $i, где i - это i-я группа захвата.
Итак:
search: (\w+\.someMethod\(\)) replace: ((TypeName)$1)
Подсказка: CTRL + пробел в текстовых полях дает вам все виды предложений для написания регулярных выражений. (Боюсь, что клавиша вниз, чтобы перейти вниз по списку предложений, действительно удаляет ваш ввод в текстовом поле. Раздражающий маленький жучок)
Использование ...
поиск = (^.*импортировать )(.*) (\(.*\):)
заменить = $1$2...заменяет ...
from checks import checklist(_list):
...с...
from checks import checklist
Блоки в регулярном выражении обозначаются скобками (которым не предшествует символ "\")
(^.* импорт) находит "from checks import" и загружает его в $1 (eclipse начинает отсчет с 1)
(.* ) находим следующее " все " до следующего встреченного "(" и загружаем его до $2. $2 останавливается на " ("из-за следующей части (смотрите следующую строку ниже)
(\(.* \ ):) говорит "при первом же встреченном" ("после запуска блока $2...остановите блок $2 и начните $3. $3 загружается с "('any text'): "или, в Примере, "(_list):"
Затем в замене просто поместите $1$2, чтобы заменить все три блока только первыми двумя.
NomeN ответил правильно, но этот ответ не будет много полезен для новичков, таких как я, потому что у нас будет другая проблема, которую нужно решить, и мы не будем знать, как использовать регулярное выражение там. Поэтому я добавляю немного объяснений к этому. Ответ таков:
Поиск: (\w+\.someMethod\ (\))
Заменить: ((TypeName)$1)
Здесь:
В поиске:
Первый и последний ' ( '' ) ' изображает группу в регулярном выражении
'\w' изображает слова (буквенно-цифровые + подчеркивание)
'+' изображает один или несколько(то есть один или несколько буквенно-цифровых + подчеркивание)
'."это специальный символ, который изображает любой символ( т. е.+ средства один или несколько символов любого характера). Потому что это особый характер изобразить а '."мы должны дать побег характер с ним, т. е.".'
'метода someMethod' дается как следует обыскали.
Две круглые скобки ' ( ' ,') ' даны вместе с экранирующий символ потому что они являются особыми символами, которые используются для изображения группы (о группе мы поговорим в следующем пункте)
В замене:
Это дано ' ((TypeName)$1)', здесь $1 изображает группа. То есть все символы, которые заключены внутри первого и последняя скобка '(' ,')' в поле поиска
Кроме того, убедитесь, что вы выбрали опцию "регулярное выражение" в найти замену коробка
Дополнительную информацию о регулярных выражениях можно найти в http://regexr.com/.
По крайней мере в STS (SpringSource Tool Suite) группы нумеруются начиная с формы 0, поэтому строка замены будет
replace: ((TypeName)$0)
Для кого-то нужно объяснение и пример того, как использовать regx на eclipse, надеюсь, это будет полезно. Вот в чем моя проблема.
Я хочу переименовать
/download.mp4^lecture_id=271
К
/271.mp4
И их может быть много.
Как вы должны это сделать.
Затем нажмите кнопку Найти / заменить
Я искал регулярное выражение для удаления пустых мест в пустой строке. Вот регулярное выражение, которое нужно найти:
^\s*\r?\n
И заменить на
\n
Просто используйте это в Мастере поиска и замены, он будет работать на 100%.
Comments