为什么Java有replaceAll(regex,替换)但是replaceAll(正则表达式,正则表达式)?

时间:2014-01-08 13:24:00

标签: java regex replace deprecated

Java确实有这个功能,感谢您的回答,对我而言,对API的关注太可惜了......

例如:

String strOriginal = "A:B&C@D";

我认为在java中应该有一个非常好的方法来改变它:

String strNew = NewReplaceAll("(.*?)\\:(.*?)&(.*?)@(.*?)","\4_\3^\2(\1\2\2\1)");

这可以得到如下结果:

AssertTrue(strNew.equalsWith("D_C^B(ABBA)") );

2 个答案:

答案 0 :(得分:3)

我认为你工作的印象是第二个String参数不会重新引用。

确实如此。

例如:

System.out.println("foo123".replaceAll("foo(.+)", "baz$1"));

输出:

baz123

答案 1 :(得分:1)

接受正则表达式作为替换,但它使用“美元”表示法(而不是“反斜杠”表示法)作为反向引用。

所以你的例子应该是:

String strNew = str.replaceAll("(.*?)\\:(.*?)&(.*?)@(.*?)","$4_$3^$2($1$2$2$1)");

请注意,捕获的组1称为$1,而不是\1等。