A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 任振铭 中级黑马   /  2015-10-4 10:19  /  740 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么取反的时候中括号加与不加会产生不同的结果,请帮忙分析一下
public class Text_ZiFuLei {
        public static void main(String[] args) {
                System.out.println("以下两结果不同");
                String regex1 = "[a-z&&^az]";
                System.out.println("a".matches(regex1));
                System.out.println("z".matches(regex1));
                System.out.println("b".matches(regex1));
                System.out.println("C".matches(regex1));
                System.out.println("D".matches(regex1));
                System.out.println("g".matches(regex1));
                System.out.println("@".matches(regex1));
                System.out.println("-------------------");

                String regex2 = "[a-z&&[^az]]";
                System.out.println("a".matches(regex2));
                System.out.println("z".matches(regex2));
                System.out.println("b".matches(regex2));
                System.out.println("C".matches(regex2));
                System.out.println("D".matches(regex2));
                System.out.println("g".matches(regex2));
                System.out.println("@".matches(regex2));
                System.out.println("-------------------");
                System.out.println("以下两结果相同");
                String regex3 = "[a-z&&[az]]";
                System.out.println("a".matches(regex3));
                System.out.println("z".matches(regex3));
                System.out.println("b".matches(regex3));
                System.out.println("C".matches(regex3));
                System.out.println("D".matches(regex3));
                System.out.println("g".matches(regex3));
                System.out.println("@".matches(regex3));
                System.out.println("-------------------");
                String regex4 = "[a-z&&az]";
                System.out.println("a".matches(regex4));
                System.out.println("z".matches(regex4));
                System.out.println("b".matches(regex4));
                System.out.println("C".matches(regex4));
                System.out.println("D".matches(regex4));
                System.out.println("g".matches(regex4));
                System.out.println("@".matches(regex4));
               
        }
}

10 个回复

倒序浏览
是不是因为去掉了"[]",^这个符号就相当于逻辑运算符中的异或了
回复 使用道具 举报
                String regex1 = "[a-z&&^az]";
                System.out.println("a".matches(regex1));
                你不加括号就相当与你判断a-z和(^这个符号和a,z)的交集了
回复 使用道具 举报
风语 发表于 2015-10-4 11:00
String regex1 = "[a-z&&^az]";
                System.out.println("a".matches(regex1) ...

为什么会这样
回复 使用道具 举报

^这个符号只有括号起来才有特殊的意思把,不然的话就是普通的符号,就像是字符t,加了个\  就不是普通的字符了
回复 使用道具 举报
风语 发表于 2015-10-4 11:33
^这个符号只有括号起来才有特殊的意思把,不然的话就是普通的符号,就像是字符t,加了个\  就不是普通的 ...

这样啊,有可能
回复 使用道具 举报
zrc203 中级黑马 2015-10-4 19:33:40
7#
学习了,正则表达式不是很懂
回复 使用道具 举报
学习中。。。。。。。。。。。。
回复 使用道具 举报
zrc203 发表于 2015-10-4 19:33
学习了,正则表达式不是很懂

马上讲到了,正好认真听一下
回复 使用道具 举报
tianweidong 发表于 2015-10-4 19:38
学习中。。。。。。。。。。。。

学习中........
回复 使用道具 举报
tianweidong 发表于 2015-10-4 19:38
学习中。。。。。。。。。。。。

学习中........
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马