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);

    再次查询 结果符合预期。

  • 相关阅读:
    关于Android反编译
    调用图灵机器人API实现Android智能机器人
    STM32 驱动1602液晶
    1602A液晶
    STM32 PWM波
    STM32的优先级NVIC_PriorityGroupConfig
    STM32——timer
    Ajax Json的后台例子
    固定导航例子
    本周学习总结
  • 原文地址:https://www.cnblogs.com/lfyu/p/13807309.html
Copyright © 2011-2022 走看看