转义模式中除某些元字符之外的所有字符

发布于 2024-11-15 07:05:40 字数 907 浏览 2 评论 0原文

我想允许用户在搜索中使用 "*" 元字符,并希望使用用户通过 Pattern.compile 输入的模式。因此,我必须转义用户输入的除 * 之外的所有其他元字符。我正在使用下面的代码来完成此操作,有更好的方法吗?

private String escapePattern(String pattern) {
        final String PATTERN_MATCH_ALL = ".*"; 
        if(null == pattern || "".equals(pattern.trim())) { 
            return PATTERN_MATCH_ALL;
        }
        String remaining = pattern;
        String result = "";
        int index;
        while((index = remaining.indexOf("*")) >= 0) { 
            if(index > 0) {
                result += Pattern.quote(remaining.substring(0, index)) + PATTERN_MATCH_ALL;
            }
            if(index < remaining.length()-1) {
                remaining = remaining.substring(index + 1);
            } else
                remaining = "";
        }
        return result + Pattern.quote(remaining) + PATTERN_MATCH_ALL;
    }

I want to allow the user use a "*" metachar in search and would like to use the pattern entered by user with Pattern.compile. So I would have to escape all the other metachars that user enters except the *. I am doing it with the below code, is there a better way of doing this?

private String escapePattern(String pattern) {
        final String PATTERN_MATCH_ALL = ".*"; 
        if(null == pattern || "".equals(pattern.trim())) { 
            return PATTERN_MATCH_ALL;
        }
        String remaining = pattern;
        String result = "";
        int index;
        while((index = remaining.indexOf("*")) >= 0) { 
            if(index > 0) {
                result += Pattern.quote(remaining.substring(0, index)) + PATTERN_MATCH_ALL;
            }
            if(index < remaining.length()-1) {
                remaining = remaining.substring(index + 1);
            } else
                remaining = "";
        }
        return result + Pattern.quote(remaining) + PATTERN_MATCH_ALL;
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偷得浮生 2024-11-22 07:05:40

怎么样

"\\Q" + pattern.replace("*", "\\E.*\\Q") + "\\E";

How about

"\\Q" + pattern.replace("*", "\\E.*\\Q") + "\\E";
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文