我想逃避Java中的RegExp元字符。下面是我想:转义Java RegExp元字符
这是目前我在做什么,但它不工作:
String inputStr= "This is $ test";
inputStr = inputStr.replaceAll("$","\\$");
但我发现了错误的输出:
"This is $ test$"
我想逃避Java中的RegExp元字符。下面是我想:转义Java RegExp元字符
这是目前我在做什么,但它不工作:
String inputStr= "This is $ test";
inputStr = inputStr.replaceAll("$","\\$");
但我发现了错误的输出:
"This is $ test$"
你需要:
inputStr.replaceAll("\\$", "\\\\\\$");
的字符串,更换需要2个反斜杠,因为$在正则表达式有特殊的含义。所以$必须被转义,得到:\$
,并且反斜杠必须本身在java字符串内被转义:"\\$"
。
替换字符串需要6个反斜线,因为这两个\和$必须在替换字符串的特殊含义:
因此,如果您打算替换字符串是“\ $”,你需要逃避每个这两个字符来获得:\\\$
,然后你需要使用的每个反斜杠 - 其中3,1字面和2逃脱 - 必须也内java字符串转义:"\\\\\\$"
。
第一replaceAll的参数实际上是一个正则表达式,而$实际上意味着“匹配字符串的结尾”。你可以使用replace来替代,它不使用regexp,只是一个普通的字符串替换,在这种情况下实现你想要的。如果你想使用正则表达式,只需在第一个参数中跳过$。
你必须把6个反斜杠,所以你转义反斜线和逃脱元字符:
inputStr.replaceAll("\\$","\\\\\\$");
正如你所说,$是正则表达式保留字符。那么,你需要逃避它。你可以用一个反斜杠字符来做到这一点:
inputStr.replaceAll("\\$", ...);
在更换时,$和\字符也有特殊的意义:
注意,反斜杠()和美元符号($)替换字符串可能会导致结果不同,如果它被视为字面替换字符串;看Matcher。的replaceAll
然后,替换将是反斜线字符和美元符号,两者由一个“\”字符被转义(这需要加倍TOI构建字符串):
inputStr.replaceAll("\\$", "\\\\\\$");
只需使用'replace'替代replaceAll即可。它会工作,并且会更有效率。 – jahroy