正则表达式的圆括号和中括号的区别

来源:互联网 发布:招商证券理财软件下载 编辑:程序博客网 时间:2024/06/04 22:47

现象

 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,符合原因中的解释。

0 0