Escape Java RegEx元字符

时间:2012-06-14 21:32:25

标签: java regex string escaping

我试图逃避Java中的RegExp元字符。以下是我想要的:

INPUT STRING: "This is $ test"
OUTPUT STRING: "This is \$ test"

这就是我目前正在做的事情,但它不起作用:

String inputStr= "This is $ test";
inputStr = inputStr.replaceAll("$","\\$");

但我的输出错误:

"This is $ test$"

4 个答案:

答案 0 :(得分:3)

你需要:

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

要替换的String需要2个反斜杠,因为 $ 在regexp中有特殊含义。所以必须转义$才能得到:\$,并且反斜杠必须本身在java字符串中进行转义:"\\$"

替换字符串需要6个反斜杠,因为 \ $ 在替换字符串中都有特殊含义:

  • \可用于转义替换字符串中的字符。
  • $可用于在替换字符串中进行反向引用。

因此,如果你想要的替换字符串是“\ $”,你需要转义这两个字符中的每一个来获得:\\\$,然后你需要使用每个反斜杠 - 其中3个,1个文字和2个for escapes - 必须在java字符串中转义:"\\\\\\$"

请参阅:Matcher.replaceAll

答案 1 :(得分:1)

你必须放入6个反斜杠,这样你就可以逃避反斜杠并逃离metachar:

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

答案 2 :(得分:1)

如你所说,$是Regex的保留字符。然后,你需要逃避它。您可以使用反斜杠字符执行此操作:

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

在替换中,$和\字符也有特殊含义:

  

请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同;见Matcher.replaceAll

然后,替换将是反斜杠字符和美元符号,它们都被'\'字符转义(需要加倍才能构建字符串):

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

答案 3 :(得分:0)

replaceAll的第一个参数实际上是一个正则表达式,而$实际上意味着“匹配字符串的结尾”。您可以使用替换,而不使用正则表达式,只是一个普通的字符串替换,以实现您在这种情况下所需的。如果你想使用正则表达式,只需在第一个参数中转义$。