Java Regex多模式组替换

时间:2014-07-18 00:11:36

标签: java regex regex-group

说我有以下字符串

String Context = "old1 old2 old3 old4 old5 old6"

我希望做一个模式:(old2).*(old4)

所以第2个单词位于$1,而单词4位于$2

是否有任何函数或方法可以同时替换两个单词字符串?仅使用组变量($1$2)?

因此,我可以指定$1将成为new2$2将成为new4。 我不想找到字符串old2old4并将其替换为new2new4

3 个答案:

答案 0 :(得分:4)

只需要一个小组

如果我理解,这就是你需要的:

String replaced = yourString.replaceAll("old2(.*?)old4", "new2$1new4");

<强>解释

  • old2匹配文字字符
  • (.*?)懒惰匹配字符(将它们捕获到第1组),最多...
  • old4
  • 替换为new2,第1组的内容和new4

答案 1 :(得分:1)

您可以考虑在此处使用肯定前瞻

String s = "old1 old2 old3 old4 old5 old6";
String r = s.replaceAll("old(?=[24])", "new");
System.out.println(r); //=> "old1 new2 old3 new4 old5 old6"

Lookarounds是零宽度断言。它们不会消耗字符串上的任何字符。

这将删除“old”,将其替换为“new”,声明其后跟{({1}}或2)。

答案 2 :(得分:0)

简单的replace

怎么样?
 "old1 old2 old3 old4 old5 old6".replace("old2", "new2").replace("old4", "new4");

当然原始String和替换目标以及替换替换可以是变量。