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

lidabo 阅读:157 2025-06-02 22:19:02 评论:0

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

    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
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号