我正在尝试使用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。有人可以告诉我这里我做错了什么?
答案 0 :(得分:1)
您的正则表达式匹配3的两侧的任何非字母数字字符,但可选择匹配左侧。因此,在第三种情况下,3的左边有一个3,因为匹配是可选的。
33.
.
不是字母数字,前3的匹配是可选的。 - 匹配
Hellos
s
是字母数字,与正则表达式不匹配。
您还可以使用regexr.com来测试正则表达式。