web-dev-qa-db-fra.com

Eclipse, recherche d'expressions régulières et remplacement

Dans Eclipse, est-il possible d’utiliser la chaîne de recherche correspondante dans la chaîne de remplacement lors de la recherche et du remplacement par une expression régulière?

Fondamentalement, je veux remplacer toutes les occurrences de

variableName.someMethod()

avec:

((TypeName)variableName.someMethod())

nomVariable peut être n'importe quel nom de variable.

Dans sed je pourrais utiliser quelque chose comme:

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

En d'autres termes, & représente la chaîne de recherche correspondante. Y at-il quelque chose de similaire dans Eclipse?

Merci!

108
Dan

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

alors:

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

indice: CTRL + espace dans les zones de texte vous donne toutes sortes de suggestions pour l'écriture d'expressions régulières. (Je crains que la touche bas, pour descendre la liste des suggestions, efface votre saisie dans la zone de texte. Irritant petit bug)

211
NomeN

En utilisant ...
search = (^. * import) (. *) (\ (. * \) :)
remplace = 1 $ 2 $

... remplace ...

from checks import checklist(_list):

...avec...

from checks import checklist



Les blocs dans les expressions rationnelles sont délimités par des parenthèses (qui ne sont pas précédées d'un "\")

(^. * import) trouve "à partir de chèques import" et le charge à 1 $ (Eclipse commence à compter à 1)

(. *) trouve le prochain "tout" jusqu'au prochain "(") et le charge à 2 $. 2 $ s'arrête au "(" en raison de la partie suivante (voir la ligne suivante ci-dessous)

(\ (. * \) :) dit "à la première rencontre" ("après le début du bloc $ 2 ... arrêter le bloc $ 2 et démarrer $ 3. $ 3 est chargé avec le" ('tout texte'): "ou , dans l'exemple, le "(_list):"

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



Screenshot

6
RightmireM

NomeN a répondu correctement, mais cette réponse ne serait pas très utile pour les débutants comme moi, car nous aurons un autre problème à résoudre et nous ne saurions pas comment utiliser RegEx ici. J'ajoute donc un peu d'explication à cela. La réponse est

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

remplace: ((TypeName) $ 1)

Ici:

À la recherche:

  • Premier et dernier '(' '') représente un groupe en regex

  • '\ w' représente des mots (alphanumérique + trait de soulignement)

  • '+' représente un ou plusieurs (c.-à-d. un ou plusieurs caractères soulignés alphanumériques)

  • '.' est un caractère spécial qui décrit n’importe quel caractère (ie. + signifie un ou plusieurs de tous les caractères). Parce que c’est un caractère spécial. Pour représenter un '.' nous devrions lui donner un caractère d'évasion, c'est-à-dire '.'

  • 'someMethod' est donné car il doit être recherché.

  • Les deux parenthèses '(', ')' sont données avec le caractère d'échappement Car ce sont des caractères spéciaux utilisés pour décrire un groupe (Nous discuterons du groupe dans le point suivant)

En remplacement:

  • Il est donné '((TypeName) $ 1)', ici $ 1 représente le groupe. C’est-à-dire tous les caractères compris entre la première .__ et la 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 boîte de remplacement.

Vous trouverez plus d’informations sur RegEx dans http://regexr.com/ .

3
padippist

Au moins chez STS (SpringSource Tool Suite), les groupes sont numérotés à partir de 0, ainsi la chaîne de remplacement sera

replace: ((TypeName)$0)
2
Yaroslav Lyakh

Si vous avez besoin d'une explication et d'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 en avoir beaucoup.

Comment vous devriez faire ceci est.

enter image description here

Puis cliquez sur le bouton Rechercher/Remplacer

0
MadNik

Je cherchais regex pour supprimer les espaces vides dans la ligne vide. Voici la regex à trouver:

^\s *\r?\n

et remplacer par 

\ n

Utilisez-le simplement dans l'assistant de recherche et de remplacement, il fonctionnera à 100%.

0
Rahul Raghuvanshi