2009-09-03 3 views
101

En éclipse, est-il possible d'utiliser la chaîne de recherche correspondante dans le cadre de la chaîne de remplacement lors d'une recherche d'expression régulière et de la remplacer?Eclipse, recherche d'expression régulière et remplacement

Fondamentalement, je veux remplacer toutes les occurrences de

variableName.someMethod() 

avec:

((TypeName)variableName.someMethod()) 

variableName peut être tout un nom de variable.

En sed je pourrais utiliser quelque chose comme:

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

C'est, & représente la chaîne de recherche adaptée. Y a-t-il quelque chose de similaire dans Eclipse?

Merci!

+0

Bonne documentation sur Eclipse RegEx: http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.jubula.client.ua.help%2Fhtml%2Freference%2Fnode4.html –

Répondre

201

Oui, "()" capture un groupe. vous pouvez l'utiliser à nouveau avec $ i où i est le iième groupe de capture.

donc:

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

indice: espace CTRL + dans les zones de texte vous donne toutes sortes de suggestions d'expression régulière écriture. (J'ai peur que la touche bas, pour descendre la liste des suggestions, supprime votre entrée dans la zone de texte.Irritant petit bug)

+1

travaille pour moi :( – kellogs

+12

Grande réponse, surtout l'indice est un point supplémentaire vaut :) –

+0

C'est une bonne réponse et un indice utile. Cela aurait été plus utile s'il avait été décrit un peu plus en détail. – iammilind

2

Au moins aux groupes STS (SpringSource Tool Suite) sont numérotés à partir du formulaire 0, donc remplacer la chaîne sera

replace: ((TypeName)$0) 
+5

Ce n'est pas vrai afaik. Le $ 0 représente l'ensemble du terme de recherche original. Dans ce cas, je suppose que cela fonctionnerait par hasard si. –

0

Pour quelqu'un besoin d'une explication et un exemple d'utilisation de regx sur eclipse, espérons que cela sera utile. Voici mon problème.

enter image description here

Je veux renommer

/download.mp4^lecture_id=271 

à

/271.mp4 

Et il peut y avoir beaucoup d'entre eux.

Comment vous devriez faire ceci est.

enter image description here

puis appuyez sur Rechercher/Remplacer le bouton

6

avec ...
search = (^. * Import) (. *) (\ (. * \) :)
remplacer = $ 1 $ 2

... remplace ...

from checks import checklist(_list): 

... avec ...

from checks import checklist 



blocs dans regex sont délimitées par des parenthèses (qui ne sont pas précédés par un "\")

(^. * import) trouve "de l'importation de chèques" et le charge à 1 $ (l'éclipse commence à compter à 1)

(. *) trouver le prochain "tout" jusqu'à la prochaine rencontre "(" et le charge à 2 $. $ 2 s'arrête au "(" à cause de la prochaine partie (voir la ligne suivante)

(\ (. * \) :) dit "au premier contact" ("après le bloc de démarrage $ 2 ... bloc d'arrêt $ 2 et commencer $ 3. $ 3 est chargé avec le "('any text'):" ou, dans l'exemple, le "(_list):"

Ensuite, dans le remplacer, il suffit de mettre le $ 1 $ 2 pour remplacer tous les trois blocs avec juste les deux premiers.



Screenshot

2

NomeN a répondu correctement, mais un swer ne serait pas d'une grande utilité pour les débutants comme moi car nous aurons un autre problème à résoudre et nous ne saurions pas comment utiliser RegEx là-dedans. J'ajoute donc un peu d'explication à cela. La réponse est

recherche: (\ w + \ someMethod \ (\).)

remplacer: ((TypeName) 1 $)

ici:

En recherche:

  • premier et dernier '(' ')' décrit un groupe regex

  • '\ w' dépeint mots (alphanumérique + soulignement)

  • '+' représente un ou plusieurs (par exemple un ou plusieurs des caractères alphanumériques + soulignement)

  • '' est un caractère spécial qui représente n'importe quel caractère (c.-à-d. + signifie un ou plusieurs caractères quelconques). Parce que c'est un caractère spécial pour représenter un '.' nous devrions donner un caractère d'échappement, c'est-à-dire '.'

  • 'someMethod' est donnée telle qu'elle doit être recherchée.

  • Les deux parenthèses « (», «) » sont données avec caractère d'échappement parce qu'ils sont un caractère spécial qui sont utilisés pour représenter un groupe (nous allons discuter sur le groupe au point suivant)

En remplacement:

  • Il est donné '((TypeName) $ 1)', ici 1 $ représente le groupe . C'est tous les personnages qui sont enfermés dans la première et dernière parenthèse « (», «) » dans le champ de recherche

  • Assurez-vous également que vous avez coché l'option « Expression régulière » dans trouver une Rempl

Plus d'informations sur RegEx peuvent être trouvées dans http://regexr.com/.