用双反斜杠替换单反斜杠需要8个反斜杠?

Joh*_*ick 5 java regex string

这是"这里到底发生了什么"的问题.我实际上并不需要解决方案.

我不得不用双反斜杠替换String中的所有单个反斜杠.这就是我最终做的......

strRootDirectory = strRootDirectory.replaceAll("\\\\", "\\\\\\\\");
Run Code Online (Sandbox Code Playgroud)

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

现在,我理解第一个参数的四个反斜杠:正则表达式需要两个反斜杠以表示单个字面反斜杠,并且java希望它们加倍.没关系.

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

Bar*_*ers 8

第二个参数不是正则表达式字符串,而是正则表达式替换字符串,其中反斜杠也具有特殊含义(它用于转义$用于变量插值的特殊字符,也用于转义自身).

来自API:

请注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同; 看Matcher.replaceAll.使用Matcher.quoteReplacement(java.lang.String)抑制这些字符的特殊含义,如果需要的话.

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


rat*_*eak 6

如果你使用它会更容易replace("\\","\\\\")(String.replace采用文字字符串,当它全部是字面时更有效)

或者你可以通过Pattern.quoteMatcher.quoteReplacement功能确保正确性