Java Pattern.compile包含特殊字符的字符串

Java Pattern.compile包含特殊字符的字符串,java,regex,Java,Regex,我有一个简单的方法来搜索和编译给定字符串的模式 String search = I GIVE IT SOME STRING; String trimmedSearch = search.trim(); if (trimmedSearch.isEmpty()) { pattern_ = null; } else if (trimmedSearch.contains("*") || trimmedSearch.contains("(")

我有一个简单的方法来搜索和编译给定字符串的模式

    String search = I GIVE IT SOME STRING;
    String trimmedSearch = search.trim();
    if (trimmedSearch.isEmpty())
    {
        pattern_ = null;
    }
    else if (trimmedSearch.contains("*") || trimmedSearch.contains("(") 
        || trimmedSearch.contains(")") || trimmedSearch.contains("?")
        || trimmedSearch.contains(".") || trimmedSearch.contains("[")
        || trimmedSearch.contains("]") || trimmedSearch.contains("{")
        || trimmedSearch.contains("}") || trimmedSearch.contains("^")
        || trimmedSearch.contains("|") || trimmedSearch.contains("$")
        || trimmedSearch.contains("+") || trimmedSearch.contains("\\"))
    {
        pattern_ = null;
    }
    else
    {
        pattern_ = Pattern.compile(trimmedSearch.toUpperCase(), Pattern.CASE_INSENSITIVE);
    }
每当搜索被禁用时,模式就会严重崩溃。
*

因此,我进行了可怕的巨大if语句检查,以确保字符串不包含任何可能使其崩溃的字符。但是,如果我想在搜索中也包括它们呢。有办法吗

任何帮助都将不胜感激,在网上任何地方搜索此类问题都非常困难,我开始失去理智。

使用。它从输入中引用所有正则表达式元字符

如果此方法的结果与原始结果不同,则您知道输入中至少有一个regex元字符:

pattern_ = trimmedSearch.equals(Pattern.quote(trimmedSearch))
    ? Pattern.compile(trimmedSearch.toUpperCase(), Pattern.CASE_INSENSITIVE)
    : null;

可以像这样对字符串中的特殊字符进行转义

trimmedSearch = Pattern.quote(trimmedSearch);