java - Pattern.compile 包含特殊字符的字符串

标签 java regex

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

    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 语句检查以确保该字符串不包含任何可能使其崩溃的字符。但是,如果我还想将它们包括在搜索中怎么办。有什么办法吗?

任何帮助将不胜感激,很难在任何地方在线搜索此类问题,我开始失去理智。

最佳答案

使用Pattern.quote() .它引用其输入中的所有正则表达式元字符。

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

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

关于java - Pattern.compile 包含特殊字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16948144/

相关文章:

python - 创建空列表并进行一些操作

需要 Java Singleton 解释

java - ListView 中的链接和单击?

java - 包含在 Android : findViewById returns null

java - Java中使用正则表达式分隔多个SQL语句

java - 如何使用正则表达式验证 1-99 的范围?

javascript - 删除日期格式的尾随字符串

c++ - std::regex,匹配字符串的开始/结束

java - spring mvc项目不返回jsp页面(HTTP Status 404)

java - 我需要有关使用 JDBC 的 INSERT 语句的帮助