一、新建一个转义类:
public class RegexEscapeUtils {
private RegexEscapeUtils() {
}
private static final Set<Character> ESCAPE_SET = Collections.synchronizedSet(new HashSet<>(Arrays.asList(
'\\',
'.',
'$',
'&',
'+',
'*',
'?',
'(',
')',
'[',
']',
'{',
'}',
'|',
'^'
)));
public static String escapeRegex(final String str) {
if (str == null) {
return null;
}
if ("".equals(str)) {
return str;
}
StringBuilder stringBuilder = new StringBuilder(str.length() * 2);
CharacterIterator iterator = new StringCharacterIterator(str);
char ch = iterator.current();
while (CharacterIterator.DONE != ch) {
if (ESCAPE_SET.contains(ch)) {
stringBuilder.append('\\');
}
stringBuilder.append(ch);
ch = iterator.next();
}
return stringBuilder.toString();
}
}
二、在mongodb的查询中调用该方法
query.addCriteria(Criteria.where("createUser").regex("^.*?" + RegexEscapeUtils.escapeRegex(logManageRequest.getUserName()) + ".*?$"));
三、可通过输入特殊字符查询