java - 转义 Java RegEx 元字符

标签 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$"

最佳答案

您需要:

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

要替换的字符串需要2个反斜杠,因为$在正则表达式中具有特殊含义。因此 $ 必须被转义,才能得到:\$,并且反斜杠必须本身在 java 字符串中转义:"\\$" .

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

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

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

参见:Matcher.replaceAll

关于java - 转义 Java RegEx 元字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11041674/

相关文章:

regex - 如何突出显示所有行内单词重复项?

python - 参数化字符串格式会产生意想不到的结果

r - R 中的字符串模式

java - 在 MongoDB 中查询数组位置?

java - 循环遍历数组的各个部分

regex - Mercurial 为简单的 GLOB 语法提供 "invalid pattern"错误

ruby - 在 If, Else 语句中测试正则表达式

Python 缓冲区复制速度 - 为什么数组比字符串慢?

c# - 使用 C# 开发一个充当 Web 程序的程序

java - NoClassDefFoundError Htmlunit