Java正则表达式匹配具有特殊字符的精确单词

Ank*_*ani 9 java regex string

我有用户输入的关键字列表,它们可能包含特殊字符等$, #, @, ^, &,.

根据我的要求,当我收到短信列表时,我需要搜索每条短信中的所有关键字.

我们需要匹配完全关键字.

案例1:简单关键字 - 简单消息

我曾经\b匹配完全关键字,它工作正常.

public static void main(String[] args) {
        String patternStr =  "(?i)\\bHello\\b";

        Pattern pattern = Pattern.compile(patternStr);

        List<String> strList = new ArrayList<String>();
        strList.add("HHello Message");
        strList.add("This is Hello Message ");
        strList.add("Now Hellos again.");

        for(String str : strList) {
            Matcher matcher = pattern.matcher(str);
            System.out.println(">> "+matcher.find());
        }
    }
Run Code Online (Sandbox Code Playgroud)

按预期输出

>> false
>> true
>> false
Run Code Online (Sandbox Code Playgroud)

案例2:简单关键字 - 具有特殊字符的消息

现在,如果我在跟踪消息上面运行相同的代码,那么它没有按预期工作.

List<String> strList = new ArrayList<String>();
strList.add("#Hello Message");
strList.add("This is Hello Message ");
strList.add("Now Hellos again.");
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

true
true
false
Run Code Online (Sandbox Code Playgroud)

预计输出

false
true
false
Run Code Online (Sandbox Code Playgroud)

案例3:具有特殊字符的关键字和消息

如果我收到以下消息,关键字是#Hello.我写了下面的代码,但它没有用.

public static void main(String[] args) {
        String patternStr =  "(?i)\\b#Hello\\b";

        Pattern pattern = Pattern.compile(patternStr);

        List<String> strList = new ArrayList<String>();
        strList.add("HHello Message");
        strList.add("This is #Hello Message ");
        strList.add("Now Hellos again.");

        for(String str : strList) {
            Matcher matcher = pattern.matcher(str);
            System.out.println(">> "+matcher.find());
        }
    }
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

>> false
>> false
>> false
Run Code Online (Sandbox Code Playgroud)

预期产量:

>> false
>> true
>> false
Run Code Online (Sandbox Code Playgroud)

我怎样才能逃脱特殊角色并解决 CASE 2 and CASE 3.

请帮忙.

Men*_*ena 4

情况 2 似乎与情况 3 相反,所以我认为您不能将Patterns 结合起来。

对于情况 2,您的Pattern情况可能如下所示:

Pattern pattern = Pattern.compile("(\\s|^)Hello(\\s|$)", Pattern.CASE_INSENSITIVE);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们用空格或输入的开头/结尾包围关键字。

对于情况 3,您的Pattern内容可能如下所示:

Pattern pattern = Pattern.compile("[\\$#@\\^&]Hello(\\s|$)", Pattern.CASE_INSENSITIVE);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们在关键字之前添加您选择的任何特殊字符(请注意转义的保留字符$^),然后我们接受空格或输入结尾作为关键字后面的字符。