我正在尝试使用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测试您的正则表达式。