【转载】mongoTemplate对包含特殊字符的模糊查询处理
  OIW0KlaMcRRl 2023年11月28日 28 0


问题解决:

java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0

场景: 根据地址模糊查询  例如:北京航空航天大学(学院路校区)学院路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);

再次查询 结果符合预期。

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月28日 0

暂无评论

推荐阅读
  xaeiTka4h8LY   2024年05月17日   56   0   0 数据库JavaSQL
  xaeiTka4h8LY   2024年05月17日   45   0   0 字符串
OIW0KlaMcRRl