Dans eclipse, est-il possible d'utiliser la chaîne de recherche correspondante dans le cadre de la chaîne de remplacement lors de l'exécution d'une recherche et d'un remplacement d'expression régulière?
Fondamentalement, je souhaite remplacer toutes les occurrences de
variableName.someMethod()
avec:
((TypeName)variableName.someMethod())
Où variableName peut être n'importe quel nom de variable.
Dans sed, je pourrais utiliser quelque chose comme:
s/[a-zA-Z]+\.someMethod\(\)/((TypeName)&)/g
Autrement dit, & représente la chaîne de recherche correspondante. Y a-t-il quelque chose de similaire dans Eclipse?
Merci!
Réponses:
Oui, "()" capture un groupe. vous pouvez l'utiliser à nouveau avec $ i où i est le ième groupe de capture.
Alors:
Astuce: CTRL+ Spacedans les zones de texte vous donne toutes sortes de suggestions pour l'écriture d'expressions régulières.
la source
stringVar.equals("xxx")
par"xxx".equals(stringVar)
. J'ai utilisé l'expression rationnelle suivante dans la boîte de dialogue de recherche / remplacement:search: ([^()! ]+).equals\("(.*)"\)
,replace: "$2".equals\($1\)
.Utilisation de ...
search = (^. * Import) (. *) (\ (. * \) :)
replace = $ 1 $ 2
... remplace ...
...avec...
Les blocs dans l'expression régulière sont délimités par des parenthèses (qui ne sont pas précédées d'un "\")
(^. * Import) trouve "from checks import" et le charge à $ 1 (eclipse commence à compter à 1)
(. *) Trouve le suivant " tout "jusqu'au prochain rencontré" ("et le charge à $ 2. $ 2 s'arrête au" ("à cause de la partie suivante (voir la ligne suivante ci-dessous)
(\ (. * \) :) dit" au premier rencontré "( "après le début du bloc $ 2 ... arrêtez le bloc $ 2 et démarrez $ 3. $ 3 est chargé avec le" ('any text'): "ou, dans l'exemple, le" (_list): "
Ensuite, dans le remplacement, mettez simplement le 1 $ 2 $ pour remplacer les trois blocs par les deux premiers seulement.
la source
NomeN a répondu correctement, mais cette réponse 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
Ici:
À la recherche:
Le premier et le dernier '(' ')' représente un groupe en regex
'\ w' représente des mots (alphanumérique + trait de soulignement)
'+' représente un ou plusieurs (c'est-à-dire un ou plusieurs caractères alphanumériques + trait de soulignement)
'.' est un caractère spécial qui représente n'importe quel caractère (ie. + signifie un ou plusieurs caractères de n'importe quel caractère). Parce que c'est un caractère spécial pour représenter un '.' nous devrions lui donner un caractère d'échappement, c'est-à-dire '.'
'someMethod' est donné tel qu'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 qui sont utilisés pour représenter 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 tous les caractères qui sont inclus entre la première et la dernière parenthèse '(', ')' dans le champ de recherche
Assurez-vous également d'avoir coché l'option 'Expression régulière' dans la case Rechercher une case à remplacer
Vous trouverez plus d'informations sur RegEx sur http://regexr.com/ .
la source
Au moins au moins les groupes STS (SpringSource Tool Suite) sont numérotés à partir de la forme 0, la chaîne de remplacement sera donc
la source
Pour quelqu'un qui a besoin d'une explication et d'un exemple sur la façon d'utiliser une regxp dans Eclipse. Voici mon exemple illustrant le problème.
Je veux renommer
à
Et il peut y en avoir plusieurs.
Voici comment procéder.
Puis appuyez sur le bouton Rechercher / Remplacer
la source