RegEx在JAVA中搜索确切的单词

时间:2016-02-02 17:46:30

标签: java regex pattern-matching

我正在尝试使用regEx找到确切的单词。我的程序提供了错误的ouptut:

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&gt; 1例如:

   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。有人可以告诉我这里我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

33.

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

Hellos

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

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