RegEx:如何引用替换字符串中多次出现的子表达式

时间:2013-12-17 20:33:01

标签: regex variables replace intellij-idea find

不确定这是否可行,但我正在尝试在IntelliJ IDEA中进行动态查找/替换......

在我的Java项目中,有几种方法包含字符串连接,如下所示:

return "[foo=" + foo + ", bar=" + bar + ", this=" + this + ", that=" + that + "]";

我编写了以下RegEx来查找所有这些事件:

return (\"[^\"]+\")+((\s\+\s)+([\pL\pN\r\s]*)+(\s\+\s)+(\"[^\"]+\"))*;

现在我想用等效的String.format()返回替换这些连接,如下所示:

return String.format("[foo=%s, bar=%s, this=%s, that=%s]", foo, bar, this, that);

我的替代RegEx到目前为止看起来像这样:

return String.format\($1$6,$4\);

...但是这里发生了一些事情,还有一些棘手的要求。

  1. $4是空的。
  2. $6仅返回最后一次出现的(\"[^\"]+\")
  3. 我需要为每次出现$4生成“,$ 4”。
  4. 我需要从$1$6中删除引号,并在任何“=”符号后附加“%s”。
  5. 这可能吗?知道怎么做,允许连接任意数量的字符串吗?

    提前致谢!

1 个答案:

答案 0 :(得分:2)

您不需要正则表达式查找和替换。如果将光标置于字符串连接的中间,则应出现黄色灯泡。如果你点击灯泡(或者更好,alt-Enter),它应该给你至少三个不同的代码重构。

请参阅意向文档here