我试图逃避Java中的RegExp元字符。以下是我想要的:
INPUT STRING: "This is $ test"
OUTPUT STRING: "This is \$ test"
这就是我目前正在做的事情,但它不起作用:
String inputStr= "This is $ test";
inputStr = inputStr.replaceAll("$","\\$");
但我的输出错误:
"This is $ test$"
答案 0 :(得分:3)
你需要:
inputStr.replaceAll("\\$", "\\\\\\$");
要替换的String需要2个反斜杠,因为 $ 在regexp中有特殊含义。所以必须转义$才能得到:\$
,并且反斜杠必须本身在java字符串中进行转义:"\\$"
。
替换字符串需要6个反斜杠,因为 \ 和 $ 在替换字符串中都有特殊含义:
因此,如果你想要的替换字符串是“\ $”,你需要转义这两个字符中的每一个来获得:\\\$
,然后你需要使用每个反斜杠 - 其中3个,1个文字和2个for escapes - 必须也在java字符串中转义:"\\\\\\$"
。
答案 1 :(得分:1)
你必须放入6个反斜杠,这样你就可以逃避反斜杠并逃离metachar:
inputStr.replaceAll("\\$","\\\\\\$");
答案 2 :(得分:1)
如你所说,$是Regex的保留字符。然后,你需要逃避它。您可以使用反斜杠字符执行此操作:
inputStr.replaceAll("\\$", ...);
在替换中,$和\字符也有特殊含义:
请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同;见Matcher.replaceAll
然后,替换将是反斜杠字符和美元符号,它们都被'\'字符转义(需要加倍才能构建字符串):
inputStr.replaceAll("\\$", "\\\\\\$");
答案 3 :(得分:0)
replaceAll的第一个参数实际上是一个正则表达式,而$实际上意味着“匹配字符串的结尾”。您可以使用替换,而不使用正则表达式,只是一个普通的字符串替换,以实现您在这种情况下所需的。如果你想使用正则表达式,只需在第一个参数中转义$。