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可以调整它。