zoukankan      html  css  js  c++  java
  • mongoTemplate对包含特殊字符的模糊查询处理

    场景: 根据地址模糊查询  例如:北京航空航天大学(学院路校区)学院路37号院-211号楼 

    java代码如下:
    
                Pattern pattern = Pattern.compile("^.*" + detectRecordRequest.getAddr() + ".*$", Pattern.CASE_INSENSITIVE);
                Criteria c5 = Criteria.where("addr").regex(pattern);
                query.addCriteria(c5);

    此段代码如果根据“学院路37号院-211号楼”,“(学院路校区)”等是可以查询到结果,但如果根据全地址查询结果为空,这不符合要求。

    原因在哪里呢?

    答案是因为此段字符串中包含特殊字符“()”,需要特殊处理。

    代码如下:
    
        //regex对输入特殊字符转义
        private String escapeSpecialWord(String keyword) {
            if (StringUtils.isNotBlank(keyword)) {
                String[] fbsArr = { "\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|" };
                for (String key : fbsArr) {
                    if (keyword.contains(key)) {
                        keyword = keyword.replace(key, "\" + key);
                    }
                }
            }
            return keyword;
        }
    查询代码如下:
    
                Pattern pattern = Pattern.compile(".*?" + escapeExprSpecialWord(detectRecordRequest.getAddr()) + ".*");
                Criteria c5 = Criteria.where("addr").regex(pattern);
                query.addCriteria(c5);

    再次查询 结果符合预期。

  • 相关阅读:
    2013-2014 NBA 东西部决赛 + 总决赛合集
    小萌库
    小萌库一周电影大合集
    小萌库
    小萌库- 新海诚那些唯美感人的动漫
    小萌库 一周漫画精彩回顾
    小萌库
    Week10-数据库
    Week9-RabbitMQ、Redis、Mysql
    Week8-python(线程、进程、协程)
  • 原文地址:https://www.cnblogs.com/lfyu/p/13807309.html
Copyright © 2011-2022 走看看