replaceAll正则表达式替换$

时间:2011-03-16 12:40:14

标签: java regex

我正在尝试替换像这样的

字符串表达式中的所有$字符

带有s $的字符串示例和带有$ s的另一个字符串的示例,这里是结尾。

以便$字符被空格包围。

我试过string.replaceAll("$", " $ "); 这会导致非法的Argument Exception。

当我尝试像这样逃避$字符时:

string.replaceAll("\$", " $ ");  I get an invalid escape sequence error before I even build.  

当我尝试以下操作时:

string.replaceAll("\\$", " $ ");  I get an illegal argument exception again.

最后当我尝试这个时:

string.replaceAll("\\\\$", " $ ");   

它对字符串完全没有影响。我知道这是愚蠢的,我只是没有得到。任何人都可以帮忙吗?

4 个答案:

答案 0 :(得分:5)

两边都需要两个斜杠

string.replaceAll("\\$", " \\$ ");

第一个转义将传递给正则表达式的第二个斜杠。然后表达式是“\ $”,它与$符号匹配。你想用相同的替换它。

你必须转义第二个参数,因为虽然它不是正则表达式,但是根据文档,\和$符号是一个特例:

  

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

答案 1 :(得分:2)

如果您不需要将参数视为regexp,请使用replace()而不是replaceAll()(它也会替换第一个参数的所有出现,但不会将其视为regexp) :

string.replace("$", " $ ");

答案 2 :(得分:0)

尝试string.replaceAll("\\$", " \\$ ")

答案 3 :(得分:0)

你必须在替换字符串中使用$符号的原因是因为String#replaceAll()方法在引擎盖下使用了Matcher#replaceAll()。直接来自后者的Javadoc:

  

请注意反斜杠(\)和   美元符号($)在   替换字符串可能会导致   结果与它不同   被视为文字   替换字符串。美元符号可能   被视为被捕获的参考   如上所述的子序列,和   反斜杠用于逃避文字   替换字符串中的字符。