Références arrière RegEx dans IntelliJ


129

Je souhaite utiliser la fonction de recherche et de remplacement d'IntelliJ pour effectuer la transformation suivante:

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

J'ai essayé ce qui suit:

Texte à rechercher: model.put\((.*),(.*)\) Remplacer par:model\[\\1\] = \\2

Mais Intellij ne semble pas reconnaître \\1et \\2comme des références en arrière. J'ai également essayé une seule barre oblique, mais cela ne fonctionne pas non plus.

Réponses:


196

IntelliJ utilise $1pour les références arrière de remplacement .

De l'aide d'IntelliJ:

Pour plus d'informations sur les expressions régulières et leur syntaxe, reportez-vous à la documentation de java.util.regex Les références arrières doivent avoir le format $ n plutôt que \ n.


15
On dirait que "\" n'est pas requis: jetbrains.com/idea/help/… . De plus, pour moi, cela ne fonctionne que si j'entoure explicitement mon groupe de "()", sinon je ne peux pas le référencer plus tard. Ex: recherche (foo)remplacer:$1bar
Ghedeon

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

+1 le peu d'information qui a résolu mon problème connexe: je remplace les wrappers quote-plus autour des variables par des wrappers dollar-curly, c'est- '+ var +'à- dire ${var}dans certaines chaînes de modèle et je n'ai pas pu comprendre pourquoi intellij ne terminerait pas le remplacement. s'avère $doit être échappé dans le remplacement.
worc

13

En bref, vous devez utiliser $1to $npour remplacer les références arrière. \1La syntaxe ne concerne que les références arrière dans la recherche.

Dans IntelliJ 2016, la documentation intégrée à l'application est trompeuse. Voici une meilleure citation de la documentation complète:

Si vous avez besoin de faire référence à la sous-chaîne correspondante quelque part en dehors de l'expression régulière actuelle (par exemple, dans une autre expression régulière comme chaîne de remplacement), vous pouvez la récupérer en utilisant le signe dollar ($ num, où num = 1..n).

Source: syntaxe des expressions régulières 2016.1, trucs et astuces


2

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

  Références arrière
  \ n
  Quel que soit le nième groupe de capture correspondant

Mais apparemment, comme mentionné dans les réponses précédentes et d'après mon expérience, c'est vraiment \ $ n pour les références antérieures, plutôt que \ n

Vous accédez à cette aide contextuelle en cliquant sur le lien «[Aide]» à côté de l'option radio «Expression régulière» dans la boîte de dialogue «Remplacer le texte»


0

IntelliJ IDEA / Reference / Regular Expression Syntax Reference


Correspond à la sous-expression et se souvient de la correspondance. Si vous devez 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 avez besoin de faire référence à la sous-chaîne correspondante quelque part 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 ")".


J'ai trouvé la même chose ici ; cependant, j'ai finalement réussi à utiliser $ 1, sans la barre oblique inverse.
Joe Tricarico
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.