如何在Java中一次性从整个字符串中转义所有特殊字符

时间:2014-02-26 03:48:14

标签: java lucene

Lucene支持转义属于查询语法的特殊字符。当前列表的特殊字符是

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

要逃避这些角色,请在角色前使用\。例如,要搜索(1 + 1):2,请使用查询:

\(1\+1\)\:2

我的问题是如何一次性逃离整个字符串?例如myStringToEscape = "ABC^ " ~ * ? :DEF";如何获得 escapedString

2 个答案:

答案 0 :(得分:14)

您可以使用QueryParser.escape,例如:

String escapedString = queryParser.escape(searchString);
queryParser.parse("field:" + escapedString);

答案 1 :(得分:3)

如果你只是想寻找简单的替代品,那就可以了。

String regex = "([+\\-!\\(\\){}\\[\\]^\"~*?:\\\\]|[&\\|]{2})";

String myStringToEscape = "ABC^ \" ~ * ? :DEF";
String myEscapedString = myStringToEscape.replaceAll(regex, "\\\\$1");

System.out.println(myEscapedString);

这将输出:

ABC\^ \" \~ \* \? \:DEF