web-dev-qa-db-fra.com

Références de RegEx dans IntelliJ

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\((.*),(.*)\) Remplacez par: model\[\\1\] = \\2

Mais Intellij ne semble pas reconnaître \\1 Et \\2 Comme références. J'ai également essayé une seule barre oblique, mais cela ne fonctionne pas non plus.

128
Dónal

IntelliJ utilise $1 pour remplacement références arrières.

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ère doivent avoir le format $ n, plutôt que\n.

194
Steve K

En bref, vous devez utiliser $1 À $n Pour remplacer les références arrières. La syntaxe \1 Est uniquement 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 documentation complète:

Si vous devez référencer 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 en tant que chaîne de remplacement), vous pouvez la récupérer à l'aide du signe dollar ($ num, où num = 1..n).

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

13
Barett

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 déclare ceci:

 Références antérieures 
\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 arrière, 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"

2
Glen

IntelliJ IDEA/Référence/Référence de syntaxe d'expression régulière


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 à l'aide de la référence arrière (\ num, où num = 1..n). Si vous devez référencer 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 à l'aide du signe dollar ($ num, où num = 1..n). Si vous devez inclure les caractères entre parenthèses dans la sous-expression, utilisez "(" ou ")".

0
Cong De Peng