现象
String regex = ".*\\b(bug|fix|error|fail|leak|resolve|miss|correct|ensure|should|#\\d*)[es|ed|s|ly|ing|d]?\\b.*";
Pattern bug = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = bug.matcher(message);
if(m.find()) return true;
return false;
使用串Fixes-most-inspector-warnings
来匹配的时候,无法匹配,但是将后面的中括号改为圆括号则可以匹配(es|ed|s|ly|ing|d)
,思考两者的区别
原因
[ ]中括号里面的字符都是单独的,也就是es|ed
被当做五个独立的字符,而不是es
或者ed
,而()圆括号则表示这是一个分组,分组里的|
有或者的含义
验证
public static void testExpression(){
String regex = "[a|b]";
Pattern p = Pattern.compile(regex);
String check = "|";
System.out.println(p.matcher(check).find());
}
public static void testExpression2(){
String regex = "(a|b)";
Pattern p = Pattern.compile(regex);
String check = "|";
System.out.println(p.matcher(check).find());
}
运行上述例子可以得到结果 True False,符合原因中的解释。