我需要一种使用MATCHES 实现CONTAINS功能的简单方法。我相信这是我的出发点:
xxx.matches("'.*yyy.*'");
但是我需要让它成为一种通用的方法并预处理我搜索的任何东西以便被比赛接受! 必须仅使用ESCAPE'\'字符来完成!
想象一下SEARCH FOR字符串可以包含一些必须“正则表达式转义”的特殊字符......
String SEARCH_FOR="*.\\"
xxx.matches("'.*" + SEARCH_FOR + ".*'");
有捕获吗?特殊情况?应该考虑任何其他“特殊字符”吗?
由于
答案 0 :(得分:4)
您在寻找Pattern.quote(String)吗?
这为你逃脱了特殊角色。
-edit -
阅读完评论后,我真的希望你尝试使用Pattern.quote(yourString.toLowerCase()),因为它听起来像你一直在使用Pattern.quote(yourString).toLowerCase()。如果DataNucleus正在应用正则表达式,则使用\ Q和\ E转义序列应该没有问题。
由于您确实要求它,".\\".replaceAll("(\\.|\\$|\\+|\\*|\\\\)", "\\\\\$1")
输出\.\\
这将逃脱。,'s,+'s,*和's。请注意,现在这一切都在您身上。如果你没有逃避你需要的东西,或者你错误地逃避它,你将允许人们在你不期望的时候在搜索词中使用正则表达式,或者它不会返回你期望的结果。