java - 用双反斜杠替换单反斜杠需要八个反斜杠吗?

标签 java regex string

这是一个“这里到底发生了什么”的问题。我实际上不需要解决方案。

我不得不用双反斜杠替换字符串中的所有单反斜杠。这就是我最终做的......

strRootDirectory = strRootDirectory.replaceAll("\\\\", "\\\\\\\\");

...其中 strRootDirectory 是上面的 java.lang.String。

现在,我理解了第一个参数的四个反斜杠:regex 需要两个反斜杠来指示单个文字反斜杠,而 java 希望它们加倍。没关系。

但是,第二个参数的八个反斜杠到底是怎么回事?替换字符串不应该是文字(我的意思是非正则表达式)字符串吗?我预计在第二个参数中需要四个反斜杠,以表示两个反斜杠。

最佳答案

第二个参数不是regex-string,而是regex-replacement-string,其中反斜杠也有特殊含义(用于转义特殊字符$用于变量插值,也用于逃逸自身)。

来自 API:

Note that backslashes (\) and dollar signs ($) in the replacement string may cause the results to be different than if it were being treated as a literal replacement string; see Matcher.replaceAll. Use Matcher.quoteReplacement(java.lang.String) to suppress the special meaning of these characters, if desired.

-- http://download.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll(...)

关于java - 用双反斜杠替换单反斜杠需要八个反斜杠吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7766765/

相关文章:

Java:使用 ExecutorService 并行调用 API getList

javascript - 正则表达式匹配标点空格但保留标点符号

javascript - 如何将单词变成整数

c++ - 在 Visual Studio C++ 中初始化 std::string 数组时崩溃

java - 无法在 macOS : No toolkit found 上执行 JavaFX 示例

java - 如何在Tomcat中定义上下文加载的顺序,或者定义上下文之间的一些依赖层次?

java - 解析搜索查询

python - 从从文本文件中提取 IP 的正则表达式中排除 IP

string - 如何将文件的内容分配给正在进行的openge 4gl的字符串变量?

java - rhel 7.4 上的 ibm java 太慢了