黑马程序员技术交流社区

标题: java基础 正则表达式 [打印本页]

作者: 磊子    时间: 2015-9-13 22:46
标题: java基础 正则表达式
正则表达式:(Pattern)
        概述:符合某种规则的字符串。
        作用:实际开发中,一般使用正则来做校验的。
        校验QQ:
                1、不是是0开头的,
                2、必须是5-15位的数字字符
                [1-9]\\d{4,14}

        String类中的方法:
                public boolean matches(String regex);  //判断字符串是否与给定的正则匹配。

        分类:
                字符类:
                        [abc]  : a,b,c三者中的任意一个
                        [^abc] : 只要不是a,b,c三者中的任何一个就可以
                        [a-zA-Z]:所有的英文字母
                        [0-9] : 所有的数字

                预定义字符类:
                        .  任意字符
                        \d 所有的数字   
                        \w 单词字符(所有的英文字母,数字,下划线) 相当于[a-zA-Z0-9_]

                        \\  表示一个\
                        \\. 表示字符.

                数量词:
                        X? :一次或者一次也没余
                        X* :零次或者多次 (可以是零次,也可以是1次)
                        X+ :一次或多次 (至少一次)
                        X{n} : 恰好n次。
                        X{n,} : 至少n次
                        X{n,m} : 至少n次,至多不超过m次(包括m次)

        功能:
                分割功能:
                        public String[] split(String regex)
                        //张三 lisi 王五
                案例:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”   
                        思路:
                                1、切割字符串,获取到一个新的字符串数组。
                                2、遍历字符串数组,把每一个遍历到的元素 转换成 int,并将结果存到int数组中。
                                3、排序。(冒泡,选择,sort())
                                4、把排序后的int数组转成字符串。(用StringBuffer,StringBuilder)

                替换功能:
                        public String replaceAll(String regex, String replacement);
                                用给定的字符串replacement 去替换,字符串(谁调用就是谁)中符合正则规则的字符串(regex)。


                分组:
                        怎么分组?
                                通过从左至右计算其开括号的形式类分组,并且对开括号进行编号(编号是从1开始)。
                                示例:
                                        ((A)(B(C)))

                                        组零永远代表整个表达式。
                                        第一组:(A)(B(C))
                                        第二组:A
                                        第三组:B(C)
                                        第四组:C
                        叠词:
                                相同的字符连续出现两次或以上,就是叠词。
                                叠词的切割规则:
                                        (.)\\1+
                                叠词切割,保留一个:
                                        replaceAll("(.)\\1+","$1");
                                切割路径:
                                        示例:
                                                D:\\教案\\14_第十四天\\day14\\video
                                    正则表达式:
                                                \\\\


                思考:请按照叠词切割: “sdqqfgkkkhjppppkl“  (1分钟)

        Patter(模式)和Matcher(匹配器)
                //public boolean matches(String regex);  //判断字符串是否与给定的正则匹配。
                // "akskjflsjdf".matches("正则");
               
                典型的用法:
                        Patter p = Patter.compile("正则");    //获取到正则表达式
                        Matcher m = p.matcher("akskjflsjdf"); //获取匹配器
                        boolean b = m.matches();

                "我的手机号是13161290281,我以前的手机号是1314561232,在之前是12345678920"
                Matcher类中:
                        public boolean find();
                        public String group();

                   //思考:如何把一个字符串中的手机号码获取出来
                    Patter p = Patter.compile("正则");    //获取到正则表达式
                        Matcher m = p.matcher("字符串-"); //获取匹配器
                        while(m.find()){
                          String phone = m.group();
                        }



作者: 天涯莫名    时间: 2015-9-13 23:04
路过,支持一下
作者: 13160123235    时间: 2015-9-13 23:06
走过,路过,不错过……
作者: 旦夕    时间: 2015-9-13 23:13
鼓掌,不错哦
作者: 磊子    时间: 2015-9-14 23:26
旦夕 发表于 2015-9-13 23:13
鼓掌,不错哦

嘿嘿 加油
作者: 18734903493    时间: 2015-9-14 23:38
少年居然详细如斯
作者: 小二阳    时间: 2015-9-14 23:48
顶一个,可以的
作者: 0825王欢    时间: 2015-9-14 23:51
学习。。。。。。。。。。。。。。。
作者: cloud1991    时间: 2015-9-15 09:50
赞一个,总结的挺细
作者: 插兜    时间: 2015-9-15 11:36
完全忘记有学过正则
作者: 水果牛牛    时间: 2015-9-15 12:10
学得好认真啊
作者: 867379393    时间: 2015-9-15 14:19
路过....。
作者: a334    时间: 2015-9-15 14:25
我觉得 正则表达式  通篇了解一下!用的时候再查 就好了
作者: 2073488679    时间: 2015-9-15 14:47
做的可以
作者: heimatai6    时间: 2015-9-16 00:02
路过,支持一下
作者: 18664300701    时间: 2015-9-16 00:15
嗯,感觉用的很少




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2