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

再次查詢 結果符合預期。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM