2009-09-03 17 views
101

En eclipse, ¿es posible usar la cadena de búsqueda coincidente como parte de la cadena de reemplazo cuando se realiza una búsqueda y reemplazo de expresiones regulares?Eclipse, búsqueda y reemplazo de expresión regular

Básicamente, quiero reemplazar todas las ocurrencias de

variableName.someMethod() 

con:

((TypeName)variableName.someMethod()) 

Dónde variableName puede ser cualquier nombre de variable en absoluto.

En sed que podría utilizar algo como:

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

Es decir, & representa la cadena de búsqueda emparejado. ¿Hay algo similar en Eclipse?

Gracias!

+0

Buena documentación en Eclipse RegEx: http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.jubula.client.ua.help%2Fhtml%2Freference%2Fnode4.html –

Respuesta

201

Sí, "()" captura un grupo. puedes usarlo de nuevo con $ i donde yo soy el i-ésimo grupo de captura.

manera:

search: (\w+\.someMethod\(\)) 
replace: ((TypeName)$1) 

pista: CTRL + espacio en los cuadros de texto que da todo tipo de sugerencias para la expresión regular de la escritura. (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)

+1

es no funciona para moi :( – kellogs

+12

Gran respuesta, especialmente la sugerencia es un valor extra que vale :) –

+0

Esa es una buena respuesta y una pista útil. Hubiera sido más útil si se hubiera descrito con un poco más de detalle. – iammilind

2

Al menos en los grupos STS (SpringSource Tool Suite) están numerados a partir de 0, por lo reemplazar cadena será

replace: ((TypeName)$0) 
+5

Eso no es cierto afaik. El $ 0 representa el término de búsqueda original completo. En este caso, supongo que eso funcionaría casualmente. –

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.

enter image description here

que desea cambiar el nombre

/download.mp4^lecture_id=271 

a

/271.mp4 

Y no puede haber muchos de estos.

Cómo hacer esto es.

enter image description here

después haga clic en buscar/reemplazar el botón

6

Usando ...
búsqueda = (^. * Importación) (. *) (\ (. * \) :)
reemplazar = $ 1 $ 2

... reemplaza ...

from checks import checklist(_list): 

... ... con

from checks import checklist 



bloques en expresiones regulares están delineados por el paréntesis (que no están precedidos por un "\")

(^. * importar) encuentra "de importación de cheques" y lo carga a $ 1 (eclipse comienza a contar a 1)

(. *) encuentra el siguiente "todo" hasta el próximo encuentro tered "(" y lo carga a $ 2. $ 2 se detiene en el "(" debido a la siguiente parte (consulte la siguiente línea a continuación)

(\ (. * \) :) dice "al principio encontrado" ("después del bloque inicial $ 2 ... bloque de detención $ 2 y comienza $ 3. $ 3 se carga con "('cualquier texto'):" o, en el ejemplo, "(_list):"

Luego, en el reemplazo, solo ponga $ 1 $ 2 para reemplazar los tres bloques con sólo los dos primeros.



Screenshot

2

NomeN ha respondido correctamente, pero esto una Swer 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 estoy agregando un poco de explicación a esto. La respuesta es

búsqueda: (\ w + \ algunMetodo \ (\).)

reemplazar: ((TypeName) $ 1)

aquí:

En la búsqueda:

  • Primero y último '(' ') representa un grupo en la expresión regular

  • '\ w' representa palabras (alfanumérico + subrayado)

  • '+' representa uno o más (es decir, uno o más de alfanumérico + subrayado)

  • ''. es un personaje especial que representa cualquier personaje (es decir, + significa uno o más de cualquier personaje). Porque este es un carácter 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 administran junto con carácter de escape porque están carácter especial que se utiliza para describir un grupo (discutiremos sobre el grupo en el punto siguiente)

En

reemplazar:

  • se da '((TypeName) $ 1)', aquí $ 1 representa el grupo . Es decir todos los caracteres que se incluyen dentro de la primera y último paréntesis '(', ')' en el campo de búsqueda

  • También asegúrese de que ha seleccionado la opción 'Expresión regular' en encontrar una caja

    reemplazar

Se puede encontrar más información sobre RegEx en http://regexr.com/.

Cuestiones relacionadas