为什么Java有一个replaceAll(regex,replacement),但有一个replaceAll(regex,regex)?

为什么Java有一个replaceAll(regex,replacement),但有一个replaceAll(regex,regex)?,java,regex,replace,deprecated,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)") ); 这会产生如下结

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)") );
这会产生如下结果:

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

我认为您的工作给人的印象是,第二个
字符串
参数不会收回引用

是的

例如:

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

baz123

我认为您的工作给人的印象是,第二个
字符串
参数不会收回引用

是的

例如:

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

baz123
它确实接受正则表达式作为替换,但它使用“美元”符号(而不是“反斜杠”符号)作为反向引用

所以你的例子应该是:

String strNew = str.replaceAll("(.*?)\\:(.*?)&(.*?)@(.*?)","$4_$3^$2($1$2$2$1)");
请注意,捕获的组1被称为
$1
,而不是
\1
,等等。

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

所以你的例子应该是:

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

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

您是否阅读了replaceAll的文档?它完全按照你说的做。你读过报纸了吗?它执行您希望它执行的操作(除非您需要在替换中双重转义反斜杠)。替换项不是“正则表达式”,因为它不是!除了占位符,你不能使用任何正则表达式构造!谢谢大家,我觉得自己说不出话来……你看过replaceAll的文档了吗?它完全按照你说的做。你读过报纸了吗?它执行您希望它执行的操作(除非您需要在替换中双重转义反斜杠)。替换项不是“正则表达式”,因为它不是!除了占位符,你不能使用任何正则表达式构造!谢谢大家,我感到无话可说。。。