Как я могу использовать регулярное выражение для замены верхнего регистра нижним регистром в Intellij IDEA?

92

Я погуглил для этого и узнал, как делать с другими парсерами регулярных выражений:

http://vim.wikia.com/wiki/Changing_case_with_regular_expressions
http://www.regular-expressions.info/replacecase.html

Я пробовал их, и ни одна из них не работает. В качестве примера я хочу использовать регулярное выражение, чтобы изменить это:

private String Name;
private Integer Bar = 2;

К этому:

private String name;
private Integer bar = 2;

Я пробовал примерно так:

replace: private (\S+) (\S+)
with: private $1 $L$2
with: private $1 \L$2
with: <etc.>

Ни один из них не работает. Можно ли это сделать в intellij, или это отсутствует функция? Это просто для образовательных целей, и пример надуманный. Я просто хочу знать, можно ли это сделать в intellij.

Даниэль Каплан
источник
3
Есть ли причина, по которой вы хотите использовать регулярное выражение? В IntelliJ для этого есть горячая клавиша .
ajp15243
@ ajp15243 Это просто для образовательных целей, и пример надуманный. Я буквально хочу знать, возможно ли это сделать в intellij.
Дэниел Каплан
3
Справедливо! Просто хотел убедиться. Я нашел ссылку на синтаксис IntelliJ Regex Syntax , и в комментариях кто-то хочет задать тот же вопрос, что и вы. Ответил модератор (и я думаю, что он немного неправильно понял), но ответ указывает, что это невозможно с синтаксисом регулярных выражений IntelliJ.
ajp15243
Вы всегда можете написать для этого плагин.
Meo
1
@tieTYT gaoagong's довольно хорош, я ему дам :).
ajp15243

Ответы:

174

В IDEA 15 вы можете использовать следующие переключатели для переключения регистра захваченных выражений. Теперь это официально задокументировано с момента выпуска этой версии.

  • \l: нижний регистр одного следующего символа
  • \u: вверх по регистру одного следующего символа
  • \L: нижний регистр следующих символов до a \Eили до конца строки замены
  • \U: вверх по регистру следующих символов до \Eили до конца строки замены
  • \E: отметить окончание изменения дела, инициированного \Uили\L

Вот пример использования (поскольку документация не ясна):

найти: (\ w + _) + (\ w +) заменить: \ L $ 1 $ 2 \ E

Вышеупомянутое будет преобразовано FOO_BAR_BAZв и foo_bar_bazт. Д. $ 1 относится к первой найденной группе захвата (в скобках), $ 2 - ко второму набору и т. Д.

Ради потомков: изначально об этом сообщил @gaoagong и задокументировано там .

Desseim
источник
13

Искал ответ и потом понял, что @ ajp15243 уже ответил на это выше. В настоящее время в Intellij нет возможности использовать функцию замены регулярных выражений для изменения регистра букв. По следующему URL-адресу есть краткое обсуждение этой функции.

http://www.jetbrains.com/idea/webhelp/regular-expression-syntax-reference.html

Вы также можете проголосовать за эту функцию в выпуске Youtrack здесь:

http://youtrack.jetbrains.com/issue/IDEA-70451

Есть плагин Regex Intellij, но, увы, он также не поддерживает нижний и верхний регистр.

http://plugins.jetbrains.com/plugin/19?pr=idea

Возможно, вам просто придется запустить файлы через программу Perl, чтобы правильно их заменить.

Гаоагонг
источник
1
Согласно youtrack, это добавляется в 15 версии IntelliJ
Кевин Шихан,
6

Я начал использовать плагин Idea Vim и научился делать подобные вещи в Vim. Таким образом, я мог повторно использовать эти навыки вне Idea.

Вот команда vim, которая сделает то, о чем вы просили.

:%s/private\s\(\w*\)\s\(w*\)/private \1 \L\2/g

Регулярное выражение вводится в среде IDE. Дополнительные косые черты необходимы для выхода из шаблона регулярного выражения в Vim.

В среде IDE

Найдите плагин в среде IDE. введите описание изображения здесь

чинто
источник
2
Огромный обходной путь, который, вероятно, не поможет 99% людей здесь, поскольку они не захотят использовать эмуляцию VIM. Но у меня уже установлен этот плагин, так что он работает для меня :)
Дэниел Каплан
1
Я знаю ... Vi и Vim поначалу кажутся бесполезными злом любому, кто использует IDE. В конце концов я начал изучать Vi, столкнувшись с ними на серверах. Мне вроде как сейчас нравится, что мне не нужно менять образ мышления при переключении между инструментами.
chinto
Я только начинаю с этим, еще не владею. Считаете ли вы, что редактирование в Intellij-IDEA с IDEAVim более продуктивно, чем до использования Vi?
Дэниел Каплан
1
Все больше и больше .. Раньше я хорошо разбирался в затмении. Затем перешел на Intellij и изучил большинство его трюков. Затем я понял, что изучение Vim поможет мне сразу освоить сервер и рабочую станцию. Я также вижу, что Vim намного мощнее в управлении текстом и навигации. Я до сих пор использую ярлыки IDE для всех функций IDE, таких как рефакторинг и поиск ссылок, переход к def и т. Д. Однако переключаться между режимами очень удобно.
chinto
1
Это отличное решение для людей, которые умеют пользоваться vi. Я включаю IdeaVim, когда мне нужно выполнить сложные замены, а затем снова отключаюсь, чтобы насладиться собственными функциями редактора Idea. Я бы хотел, чтобы у IdeaVim был индикатор, показывающий, когда он активен.
Мистер Лэнс И Слоан,