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



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



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



variableName.someMethod()


С:



((TypeName)variableName.someMethod())


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



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



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


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



Спасибо!

706   6  

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

    Ничего не найдено.