2009-09-14 11 views
119

Je veux utiliser trouver et remplacer fonctionnalité de IntelliJ pour effectuer la transformation suivante:des backreferences regex dans IntelliJ

// Replace this 
model.put('foo', 'bar') 
// With this 
model['foo'] = bar 

J'ai essayé ce qui suit:

texte pour trouver: model.put\((.*),(.*)\) Remplacer par :

Mais Intellij ne semble pas reconnaître \\1 et \\2 en tant que références arrière. J'ai aussi essayé un seul slash, mais ça ne marche pas non plus.

Merci, Don

Répondre

177

IntelliJ utilise $1 pour remplacement des backreferences.

de l'aide de IntelliJ:

Pour plus d'informations sur les expressions régulières et leur syntaxe, consultez la documentation pour java.util.regex références Retour devrait avoir n $, plutôt que le format \ n.

+14

On dirait que "\" n'est pas nécessaire: https://www.jetbrains.com/idea/help/finding-and-replacing-text-in-file.html # d1765718e362. Aussi, pour moi cela ne fonctionne que si j'entoure explicitement mon groupe avec "()", sinon je ne peux pas le référencer plus tard. Ex: search '' '(foo)' '' remplacer: '' '$ 1bar''' – Ghedeon

+0

@Ghedeon: Vous devriez probablement ajouter votre commentaire en réponse ou à la réponse existante. Votre suggestion de mettre l'expression dans() est ce qui a fonctionné pour moi. – mindreader

+0

+1 le peu d'information qui a résolu mon problème connexe: je remplace les enveloppes quote-plus autour des variables avec des enveloppes dollar-bouclés, à savoir, «+ var +» '' $ {var} 'dans certaines chaînes de modèle et ne pouvait pas comprendre pourquoi intellij ne finirait pas le remplacement. Il s'avère que '$' doit être échappé dans le remplacement. – worc

0

IntelliJ IDEA/Référence/Expression régulière Syntaxe Référence


Matches et se souvient de sous-expression du match. Si vous avez besoin d'utiliser la sous-chaîne correspondante dans la même expression régulière, vous pouvez la récupérer en utilisant la référence arrière (\ num, où num = 1..n). Si vous devez référencer la sous-chaîne correspondante en dehors de l'expression régulière actuelle (par exemple, dans une autre expression régulière du champ Remplacement), vous pouvez la récupérer en utilisant le signe dollar ($ num, où num = 1..n). Si vous devez inclure les caractères entre parenthèses dans la sous-expression, utilisez "(" ou ")".

+0

J'ai trouvé la même chose [ici] (http://www.jetbrains.com/idea/webhelp/regular-expression-syntax-reference.html); Cependant, j'ai finalement eu du succès en utilisant 1 $, sans l'antislash. –

+0

@JoeTricarico Merci! Le fait de sauter la barre oblique inversée l'a résolu aussi pour moi. – oskarth

0

L'aide contextuelle intégrée au produit pour l'expression régulière dans Idea 9.0 (et peut-être d'autres versions) semble incorrecte. Il dit ceci:

 
    Back references 
    \n 
    Whatever the nth capturing group matched 

Mais apparemment, comme mentionné dans les réponses précédentes et mon expérience, il est vraiment \ n $ pour les références arrière, plutôt que \ n

Vous obtenez à cette aide contextuelle en cliquant sur le « [Aide] » le lien suivant pour l'option radio « expression régulière » sur la la boîte de dialogue « remplacer le texte »

12

en bref, vous devez utiliser $1 à $n pour remplacement des backreferences. \1 la syntaxe est seulement pour les références arrières dans la recherche.

Dans IntelliJ 2016, la documentation intégrée à l'application est trompeuse. Voici une meilleure citation de la totalité des documents:

Si vous devez renvoyer le sous-chaîne correspondante quelque part en dehors de l'expression régulière en cours (par exemple, dans une autre expression régulière en tant que chaîne de remplacement), vous pouvez le récupérer à l'aide du signe dollar ($ num, où num = 1..n).

Source: 2016.1 regular expression syntax, Tips & Tricks

Questions connexes