Java 转义特殊字符,如+;在爪哇

Java 转义特殊字符,如+;在爪哇,java,postgresql,escaping,psql,apache-commons,Java,Postgresql,Escaping,Psql,Apache Commons,我想转义字符串中的所有特殊字符 输入字符串:Foo+Bar 输出字符串:Foo\+Bar 因此,+应该转义到\+。这是必需的,因为我必须将结果字符串作为正则表达式模式传递给Postgres SQL,因此如果我只传递+,则会导致异常 我尝试过使用,但这并没有逃逸字符串中的+如果您修改下面的自定义模式special,这可能会满足您的需要 String special = "([\\[\\]()+*.])"; String str = "This is (a test)

我想转义字符串中的所有特殊字符

输入字符串:
Foo+Bar

输出字符串:
Foo\+Bar

因此,
+
应该转义到
\+
。这是必需的,因为我必须将结果字符串作为正则表达式模式传递给Postgres SQL,因此如果我只传递
+
,则会导致异常


我尝试过使用,但这并没有逃逸
字符串中的
+
如果您修改下面的自定义模式
special
,这可能会满足您的需要

        String special = "([\\[\\]()+*.])";
        String str = "This is (a test) of [how to ] escape things like +, *, and .";
        str = str.replaceAll(special, "\\\\$1");
        System.out.println(str);
  • $1
    是对匹配的特殊字符的反向引用
  • 需要使用
    \\
    来转义转义,以便在替换中显示斜杠
      有一种方法可以在纯Java中实现。用于转义所有与正则表达式相关的字符。

      是。它只是将字符串封装在
      \Q
      \E
      之间。我不确定OP想要的是什么。我试过了,但这并没有像预期的那样将
      +
      更改为
      \+
      。@Rajeshwarsinghratore如果你想要视觉澄清,它不会更改任何特殊字符。它只是将它们与正则表达式引擎隔离开来,然后听起来您需要对字符串进行转义以绕过
      psql
      ,从而到达正则表达式解析器。这可能是因为
      psql
      不理解
      \Q
      \E
      的含义。但这只是一个猜测。我无法提供任何其他解决方案。
      \Q..\E
      特定于java正则表达式,在PostgreSQL中不起作用
      Pattern.quote
      也根据Java正则表达式引用,所以我不确定是否要依赖它。快速搜索后,
      q
      使正则表达式的其余部分在postgresql中被解释为文字字符,并且可以用作内联标志
      (?q)
      ,如果需要,这是可行的,但为此,我必须在
      特殊
      字符串中包含所有特殊字符?是的。如果这是针对正则表达式的,您也可以使用Michal Kordas的思想来转义整个字符串?好的。我尝试了模式#quote(String),但在
      +
      中不起作用。是的,该字符串将用作数据库层中的正则表达式,即
      psql
      @VGR,我确信我这样做了。这只是一个例子。因为我不知道逃跑的目的是什么,所以我想OP可以调整它。