我正在尝试使用regEx查找确切的单词。我的程序给出了错误的输出:

public static void main(String[] args) {
    String patternStr =  "3";

    Pattern patternMatcher = Pattern.compile("(\\s|\\W)?"+patternStr+"(\\s|\\W)", Pattern.CASE_INSENSITIVE);

    List<String> strList = new ArrayList<String>();
    strList.add("3? Message");
    strList.add("This is 3 Message ");
    strList.add("Hi 33.");
    strList.add("Hi [3]");
    strList.add("Hi 3!!!");


    for(String str : strList) {
        Matcher matcher = patternMatcher.matcher(str);
        System.out.println(">> "+matcher.find());
    }
  }


o / p为:

  >> true
>> true
>> true
>> true
>> true

But its supposed to be
 >> true
    >> true
    >> false
    >> true
    >> true


有人可以告诉我我在做什么错吗?它适用于word.length> 1 For ex:

   String patternStr =  "Hello";

    Pattern patternMatcher = Pattern.compile("(\\s|\\W)?"+patternStr+"(\\s|\\W)", Pattern.CASE_INSENSITIVE);

    List<String> strList = new ArrayList<String>();
    strList.add("hello? Message");
    strList.add("This is Hello Message ");
    strList.add("Hi Hellos.");
    strList.add("Hi [Hello]");
    strList.add("Hi Hello!!!");


    for(String str : strList) {
        Matcher matcher = patternMatcher.matcher(str);
        System.out.println(">> "+matcher.find());
    }
  }

The o/p is :
>> true
>> true
>> false
>> true
>> true


但是对于一封信,它给出错误的o / p。有人可以告诉我我在做什么错吗?

最佳答案

您的正则表达式匹配3两侧的任何非字母数字字符,但也可以匹配左侧。因此,在第三种情况下,在3的左边有3是可以的,因为匹配是可选的。

33.


.不是字母数字,前3个匹配项是可选的。 - 它匹配

Hellos


s是字母数字,与正则表达式不匹配。

您也可以使用regexr.com测试您的正则表达式。

07-24 15:10