regex - Eclipse, búsqueda y reemplazo de expresiones regulares
replace (5)
En eclipse, ¿es posible usar la cadena de búsqueda coincidente como parte de la cadena de reemplazo cuando se realiza una búsqueda de expresión regular y se reemplaza?
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!
Al menos en STS (SpringSource Tool Suite) los grupos se numeran comenzando desde 0, por lo que se debe reemplazar la cadena.
replace: ((TypeName)$0)
Para alguien necesita una explicación y un ejemplo de cómo usar regx en eclipse, espero que esto sea útil. Aquí está mi problema.
Quiero renombrar
/download.mp4^lecture_id=271
a
/271.mp4
Y puede haber muchos de estos.
Cómo deberías hacer esto es.
Luego presiona el botón Buscar / Reemplazar
Sí, "()" captura un grupo. puedes usarlo de nuevo con $ i donde yo soy el i-ésimo grupo de captura.
asi que:
search: (/w+/.someMethod/(/))
replace: ((TypeName)$1)
sugerencia: CTRL + espacio en los cuadros de texto le ofrece todo tipo de sugerencias para la escritura de expresiones regulares. (Me temo que la tecla de abajo, para ir a la lista de sugerencias, elimina tu entrada en el cuadro de texto. Pequeño error irritante)
Utilizando ...
search = (^. * import) (. *) (/ (. * /) :)
reemplazar = $ 1 $ 2
... reemplaza ...
from checks import checklist(_list):
...con...
from checks import checklist
Los bloques en expresiones regulares están delineados por paréntesis (que no están precedidos por una "/")
(^. * import) encuentra "de importación de cheques" y lo carga a $ 1 (eclipse comienza a contar a 1)
(. *) encuentre el siguiente "todo" hasta que encuentre el siguiente "(" y lo cargue a $ 2. $ 2 se detiene en el "(" debido a la siguiente parte (consulte la siguiente línea a continuación)
(/ (. * /) :) dice "en el primer encuentro" ("después del bloque inicial $ 2 ... detiene el bloque $ 2 y comienza $ 3. $ 3 se carga con el" (''cualquier texto''): "o, en el ejemplo, el "(_list):"
Luego, en el reemplazo, simplemente ponga $ 1 $ 2 para reemplazar los tres bloques con solo los dos primeros.
respondió correctamente, pero esta respuesta no sería de mucha utilidad para principiantes como yo porque tendremos otro problema por resolver y no sabríamos cómo usar RegEx ahí. Así que estoy agregando un poco de explicación a esto. La respuesta es
búsqueda: (/ w + /. someMethod / (/))
reemplazar: ((TypeName) $ 1)
Aquí:
En busca:
Primero 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 de caracteres alfanuméricos + guión bajo)
''''. es un personaje especial que representa cualquier personaje (es decir. + significa uno o más de cualquier personaje). Porque este es un personaje especial para representar un ''.'' deberíamos darle un carácter de escape, es decir ''.''
''someMethod'' se da como se debe buscar.
Los dos paréntesis ''('', '')'' se dan junto con el carácter de escape porque son caracteres especiales que se usan para representar un grupo (hablaremos del grupo en el siguiente punto)
En reemplazo:
Se da '' ((TypeName) $ 1) '', aquí $ 1 representa el grupo. Es decir, todos los caracteres que están encerrados dentro del primer y último paréntesis ''('', '')'' en el campo de búsqueda
También asegúrese de haber marcado la opción ''Expresión regular'' para encontrar un cuadro de reemplazo
Se puede encontrar más información sobre RegEx en http://regexr.com/ .