除了一些元素之外,它会逃脱模式中的所有字符

时间:2011-06-15 09:41:53

标签: java regex escaping

我想允许用户在搜索中使用"*"元数据,并希望使用用户使用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;
    }

1 个答案:

答案 0 :(得分:2)

怎么样

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