IntelliJ 中的正则表达式反向引用

我想使用 IntelliJ 的查找和替换特性来执行以下转换:

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

我试过以下方法:

要查找的文本: model.put\((.*),(.*)\) 替换为: model\[\\1\] = \\2

但 Intellij 似乎并不认可 \\1\\2作为背景参考。我也试过一条斜线,但也不管用。

23984 次浏览

IntelliJ 使用 $1作为 替代品回溯引用。

来自 IntelliJ 的帮助:

有关正则表达式及其语法的更多信息,请参考 Util.regex Back 引用的文档,其格式应为 $n,而不是 n。

IDEA/参考/正则表达式语法参考


匹配子表达式并记住匹配。如果需要在同一个正则表达式中使用匹配的子字符串,可以使用反向引用(num,其中 num = 1)检索它。.N).如果需要在当前正则表达式之外的某处引用匹配的子字符串(例如,在 Replace 字段中的另一个正则表达式中) ,可以使用美元符号($num,其中 num = 1)检索它。.N).如果需要在子表达式中包含括号字符,请使用“(”或“)”。

创意9.0(或许还有其他版本)中对正则表达式的产品内上下文帮助似乎是不正确的。上面说:

Back references
\n
Whatever the nth capturing group matched

但是很明显,正如前面的回答所提到的,根据我的经验,它实际上是 $n 作为背景参考,而不是 n

通过单击“ Replace Text”对话框中“正则表达式”单选项旁边的“[ Help ]”链接,可以获得此上下文帮助

简而言之,对于 替代品回溯引用,必须使用 $1$n\1语法仅用于搜索中的回溯引用。

在 IntelliJ 2016中,应用程序内部的文档有误导性:

如果需要在当前正则表达式之外的某处引用匹配的子字符串(例如,在另一个正则表达式中作为替换字符串) ,可以使用美元符号($num,其中 num = 1)检索它。.N).

资料来源: 2016.1正则表达式语法,提示和技巧