¿Cómo puedo usar una expresión regular para reemplazar mayúsculas con minúsculas en Intellij IDEA?

92

Busqué en Google para esto y descubrí cómo hacerlo con otros analizadores de expresiones regulares:

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

He probado estos y ninguno funciona. Como ejemplo, quiero usar una expresión regular para cambiar esto:

private String Name;
private Integer Bar = 2;

A esto:

private String name;
private Integer bar = 2;

Intenté algo como esto:

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

Ninguno de ellos funciona. ¿Es posible hacer esto en intellij o es una característica que falta? Esto es solo para fines educativos y el ejemplo es artificial. Solo quiero saber si esto es posible hacer en intellij.

Daniel Kaplan
fuente
3
¿Hay alguna razón por la que desee utilizar una expresión regular? IntelliJ tiene un atajo de teclas de acceso rápido para hacer eso.
ajp15243
@ ajp15243 Esto es solo para fines educativos y el ejemplo es artificial. Literalmente quiero saber si esto es posible hacer en intellij.
Daniel Kaplan
3
¡Lo suficientemente justo! Sólo quería asegurarme. Encontré la referencia de sintaxis de IntelliJ Regex , y en los comentarios, alguien parece hacer la misma pregunta que usted. Un moderador respondió (y creo que se entendió un poco mal), pero la respuesta indica que esto no es posible con la sintaxis de expresiones regulares de IntelliJ.
ajp15243
Siempre puedes escribir un complemento para eso.
Meo
1
@tieTYT gaoagong's es bastante bueno, se lo dejaré :).
ajp15243

Respuestas:

174

En IDEA 15 , puede usar los siguientes interruptores para alternar el caso de las expresiones capturadas. Esto ahora está oficialmente documentado desde que se lanzó esta versión.

  • \l: minúscula el carácter siguiente
  • \u: hasta el caso del siguiente carácter
  • \L: reduce las mayúsculas y minúsculas de los siguientes caracteres hasta un \Eo el final de la cadena de reemplazo
  • \U: sube el caso de los siguientes caracteres hasta un \Eo el final de la cadena de reemplazo
  • \E: marca el final de un cambio de caso iniciado por \Uo\L

Aquí hay un uso de ejemplo (ya que la documentación no es clara):

buscar: (\ w + _) + (\ w +) reemplazar: \ L $ 1 $ 2 \ E

Lo anterior se convertirá FOO_BAR_BAZen foo_bar_bazetc El $ 1 se refiere al primer grupo de captura encontrado (entre paréntesis), $ 2 al segundo conjunto, etc.

Por el bien de la posteridad: esto fue inicialmente informado por @gaoagong y documentado allí .

desseim
fuente
13

Busqué la respuesta y luego me di cuenta de que @ ajp15243 ya respondió esto arriba. Actualmente no hay forma de que Intellij use su función de reemplazo de expresiones regulares para cambiar el caso de una letra. Hay una breve discusión en la siguiente URL sobre la función.

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

También puede votar por la función en el número de Youtrack aquí:

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

Hay un complemento de regex Intellij, pero lamentablemente tampoco es compatible con mayúsculas y minúsculas.

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

Puede que tenga que ejecutar los archivos a través de un programa perl para reemplazarlos correctamente.

gaoagong
fuente
1
Según el youtrack, esto se agrega en la versión 15 de IntelliJ
Kevin Sheehan
6

Comencé a usar el complemento Idea Vim y aprendí a hacer cosas como esta en Vim. De esta manera, podría reutilizar estas habilidades fuera de Idea.

Aquí está el comando vim para hacer lo que pidió.

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

Regex ingresado dentro del IDE. Las barras diagonales adicionales son necesarias para escapar del patrón de expresiones regulares al Vim.

Dentro del IDE

Busque el complemento desde el IDE. ingrese la descripción de la imagen aquí

chinto
fuente
2
Enorme solución que probablemente no ayudará al 99% de las personas aquí, ya que no querrán usar la emulación VIM. Pero, resulta que ya tengo este complemento instalado, así que funciona para mí :)
Daniel Kaplan
1
Lo sé ... Vi y Vim parecen inútiles al principio para cualquiera que use un IDE. Finalmente comencé a aprender Vi después de encontrarlos a todos en los servidores. Me gusta un poco ahora que no tengo que cambiar de mentalidad mientras me muevo entre herramientas.
chinto
Recién estoy comenzando con eso, aún no lo hablo con fluidez. ¿Crees que eres más productivo en la edición en Intellij-IDEA con IDEAVim que antes de usar Vi?
Daniel Kaplan
1
Cada vez más ... Yo solía ser bueno con eclipse. Luego se mudó a Intellij y aprendí la mayoría de sus trucos. Luego me di cuenta de que aprender Vim me haría bien en Server y Workstation a la vez. También veo que Vim es mucho más poderoso en la manipulación y navegación de texto. Todavía uso atajos IDE para todas las especialidades IDE como refactorizar y encontrar referencias e ir a def, etc. Sin embargo, es muy fácil alternar entre los modos.
chinto
1
Esta es una excelente solución para las personas que saben cómo usar vi. Enciendo IdeaVim cuando necesito hacer sustituciones complejas, luego retrocedo de nuevo para disfrutar de las funciones del editor de Idea. Sin embargo, desearía que IdeaVim tuviera un indicador para mostrar cuándo está activo.
LS