Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IntelliJ中的RegEx反向引用_Java_Regex_Intellij Idea - Fatal编程技术网

Java IntelliJ中的RegEx反向引用

Java IntelliJ中的RegEx反向引用,java,regex,intellij-idea,Java,Regex,Intellij Idea,我想使用IntelliJ的查找和替换功能执行以下转换: // Replace this model.put('foo', 'bar') // With this model['foo'] = bar 我尝试了以下方法: 要查找的文本:model.put\(.*),(.*)\ 替换为:model\[\\1\]=\\2 但是Intellij似乎不把\\1和\\2识别为反向引用。我还尝试了一个斜杠,但也不起作用。IntelliJ使用$1替换反向引用 在IntelliJ的帮助下: 有关正则表达式及其语

我想使用IntelliJ的查找和替换功能执行以下转换:

// Replace this
model.put('foo', 'bar')
// With this
model['foo'] = bar
我尝试了以下方法:

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


但是Intellij似乎不把
\\1
\\2
识别为反向引用。我还尝试了一个斜杠,但也不起作用。

IntelliJ使用
$1
替换反向引用

在IntelliJ的帮助下:

有关正则表达式及其语法的详细信息,请参阅文档,以了解反向引用的格式应为$n,而不是\n格式


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



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

Idea 9.0(可能还有其他版本)中针对正则表达式的产品内上下文帮助似乎不正确。它指出:

Back references \n Whatever the nth capturing group matched 反向引用 \n 无论第n个捕获组匹配什么 但显然,正如前面的回答中所提到的,并且是我的经验,它实际上是\$n的反向引用,而不是\n


通过单击“替换文本”对话框上“正则表达式”单选选项旁边的“[help]”链接,您可以获得此上下文帮助。简而言之,对于替换反向引用,您必须使用
$1
$n
<代码>\1语法仅用于搜索中的反向引用

在IntelliJ 2016中,应用内文档具有误导性。以下是完整文档中更好的引用:

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


来源:

我发现了同样的东西;然而,我最终成功地使用了$1,没有反斜杠。似乎“\”不是必需的:。而且,对我来说,只有当我用“()”显式地包围我的组时,它才起作用,否则我以后就不能引用它了。例如:搜索
(foo)
替换:
$1bar
@Ghedeon:您可能应该将您的评论添加为答案或现有答案。你建议将表达式放在()中对我很有效。+1解决了我相关问题的一点信息:我正在用美元卷曲包装替换变量周围的引号和包装,即在一些模板字符串中,
'+var+'
${var}
,我无法理解intellij为什么不完成替换。结果是,
$
需要在替换中转义。