Затемнення, пошук регулярних виразів та їх заміна


119

Чи можливо в затемненні використовувати відповідний рядок пошуку як частину рядка заміни, виконуючи пошук регулярних виразів та заміну?

В основному, я хочу замінити всі події

variableName.someMethod()

з:

((TypeName)variableName.someMethod())

Де variaName може взагалі бути будь-яким ім'ям змінної.

У sed я міг би використовувати щось на кшталт:

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

Тобто, і являє собою відповідний рядок пошуку. Чи є щось подібне в Eclipse?

Дякую!


Хороша документація на Eclipse RegEx: help.eclipse.org/kepler/…
Каньйон Колоб

Відповіді:


225

Так, "()" захоплює групу. ви можете використовувати його знову з $ i, де я - i-я група захоплення.

Так:

пошук: (\w+\.someMethod\(\))

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

Підказка: CTRL+ Spaceу текстових полях дає всілякі пропозиції щодо регулярного написання виразів.


Це приємна відповідь і корисна підказка. Було б корисніше, якби це було описано трохи детальніше.
iammilind

Bravo Eclipse, ви правильно реалізували цю функцію!
Кеногу Лабз

Мені особливо подобається приклад для "Hex-коду для символу Unicode" :)
Стюарт Мюррі

Я хотів би додати код, який мені справді допоміг. Мені потрібно замінити кожен stringVar.equals("xxx")з "xxx".equals(stringVar). Я використовував наступне регулярний вираз в діалог пошуку / заміни: search: ([^()! ]+).equals\("(.*)"\), replace: "$2".equals\($1\).
LaDude

Не для мене. Завжди замінює першу групу ...?
RightmireM

6

Використовуючи ...
search = (^. * Import) (. *) (\ (. * \) :)
substitute = $ 1 $ 2

... замінює ...

from checks import checklist(_list):

... з ...

from checks import checklist



Блоки в регулярному вираженні позначаються круглими дужками (яким не передує «\»)

(^. * Імпорт), знаходить «з імпорту чеків» і завантажує його до $ 1 (затемнення починається відлік у 1)

(. *) Знайти наступне » все "до наступного зіткнення" ("і завантажує його до $ 2. $ 2 зупиняється на" ("через наступну частину (див. наступний рядок нижче)

(\ (. * \) :) каже" при першій зустрічі "( "після запуску блоку $ 2 ... зупиніть блок $ 2 і запустіть $ 3. $ 3 завантажується символом" ("будь-який текст"): "або, наприклад," (_list): "

Потім у заміні просто поставте $ 1 $ 2 замінити всі три блоки лише першими двома.



Знімок екрана


3

NomeN відповів правильно, але ця відповідь не буде корисною для початківців, як я, тому що у нас виникне інша проблема, і ми не знаємо, як тут використовувати RegEx. Тому я до цього додаю трохи пояснень. Відповідь така

пошук: (\ w + \. деякийМетод \ (\))

Замінити: ((TypeName) $ 1)

Тут:

У пошуку:

  • Перший і останній '(' ')' зображує групу в регулярному виразі

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

  • '+' зображує одне або більше (тобто одне або кілька буквено-цифрових + підкреслення)

  • '.' це спеціальний символ, який зображує будь-який символ (тобто. + означає один або більше будь-яких символів). Тому що це особливий символ для зображення "." ми повинні дати йому характер втечі, тобто "."

  • "деякийМетод" задається таким чином, як його слід шукати.

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

На зміну:

  • Дано ' ((TypeName) $ 1) ', тут $ 1 зображує групу. Це всі символи, які укладені в першій та останній дужках '(', ')' у полі пошуку

  • Також переконайтеся, що ви встановили прапорець "Регулярний вираз", щоб знайти поле заміни

Більше інформації про RegEx можна знайти на веб-сайті http://regexr.com/ .


2

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

replace: ((TypeName)$0)

5
Це не справжній афаїк. $ 0 являє собою весь оригінальний пошуковий термін. У цьому випадку я гадаю, що це спрацювало б випадково.
Вальтер Хек

0

Для тих, кому потрібно пояснення та приклад того, як використовувати regxp в Eclipse. Ось мій приклад, що ілюструє проблему.

введіть тут опис зображення

Я хочу перейменувати

/download.mp4^lecture_id=271

до

/271.mp4

І їх може бути кілька.

Ось як це слід зробити.

введіть тут опис зображення

Потім натисніть кнопку знайти / замінити

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.