En eclipse, ¿es posible usar la cadena de búsqueda coincidente como parte de la cadena de reemplazo al realizar una búsqueda y reemplazo de expresión regular?
Básicamente, quiero reemplazar todas las apariciones de
variableName.someMethod()
con:
((TypeName)variableName.someMethod())
Donde variableName puede ser cualquier nombre de variable.
En sed , podría usar algo como:
s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g
Es decir, & representa la cadena de búsqueda coincidente. ¿Hay algo similar en Eclipse?
¡Gracias!
Respuestas:
Sí, "()" captura un grupo. puede usarlo de nuevo con $ i donde i es el grupo de captura i'th.
Entonces:
Sugerencia: CTRL+ Spaceen los cuadros de texto le brinda todo tipo de sugerencias para la escritura de expresiones regulares.
fuente
stringVar.equals("xxx")
con"xxx".equals(stringVar)
. Usé la siguiente expresión regular en el cuadro de diálogo buscar / reemplazar:search: ([^()! ]+).equals\("(.*)"\)
,replace: "$2".equals\($1\)
.Usando ...
buscar = (^. * Importar) (. *) (\ (. * \) :)
reemplazar = $ 1 $ 2
... reemplaza ...
...con...
Los bloques en expresiones regulares están delineados por paréntesis (que no están precedidos por un "\")
(^. * Import) encuentra "from checks import" y lo carga en $ 1 (el eclipse comienza a contar en 1)
(. *) Encuentra el siguiente " todo "hasta el siguiente encontrado" ("y lo carga a $ 2. $ 2 se detiene en" ("debido a la siguiente parte (ver la siguiente línea a continuación)
(\ (. * \) :) dice" en el primer encontrado "( "después de iniciar el bloque $ 2 ... detener el bloque $ 2 y comenzar $ 3. $ 3 se carga con el" ('cualquier texto'): "o, en el ejemplo, el" (_list): "
Luego, en el reemplazo, simplemente coloque el $ 1 $ 2 para reemplazar los tres bloques con solo los dos primeros.
fuente
NomeN ha respondido correctamente, pero esta respuesta no sería de mucha utilidad para principiantes como yo porque tendremos otro problema que resolver y no sabríamos cómo usar RegEx allí. Así que añado un poco de explicación a esto. La respuesta es
Aquí:
En busca:
El primer y último '(' ')' representa un grupo en expresiones regulares
'\ w' representa palabras (alfanumérico + guión bajo)
'+' representa uno o más (es decir, uno o más caracteres alfanuméricos + subrayado)
'.' es un carácter especial que representa cualquier carácter (es decir, + significa uno o más de cualquier carácter). Porque este es un carácter especial para representar un '.' deberíamos darle un carácter de escape, es decir, '.'
'someMethod' se da tal como se va a buscar.
Los dos paréntesis '(', ')' se dan junto con el carácter de escape porque son caracteres especiales que se utilizan para representar un grupo (discutiremos sobre el grupo en el siguiente punto)
En reemplazo:
Se le da ' ((TypeName) $ 1) ', aquí $ 1 representa el grupo. Esos son todos los caracteres que están encerrados entre el primer y último paréntesis '(', ')' en el campo de búsqueda
También asegúrese de haber marcado la opción 'Expresión regular' en buscar un cuadro de reemplazo
Puede encontrar más información sobre RegEx en http://regexr.com/ .
fuente
Al menos en STS (SpringSource Tool Suite) los grupos se numeran comenzando desde 0, por lo que reemplazar la cadena será
fuente
Para alguien que necesita una explicación y un ejemplo de cómo usar un regxp en Eclipse. Aquí está mi ejemplo que ilustra el problema.
Quiero cambiar el nombre
a
Y puede haber varios de estos.
Así es como debe hacerse.
Luego presione el botón Buscar / Reemplazar
fuente