黑马程序员技术交流社区

标题: 正则表达式综述及练习 [打印本页]

作者: MUFCRyanCR7    时间: 2015-9-5 15:54
标题: 正则表达式综述及练习
/*
正则表达式:符合一定规则的表达式
        作用:专门用于操作字符串
        特点:用一些特定的符号来表示一些代码操作,这样可以简化书写
        好处:可以简化对字符串的复杂操作
        其实学习正则表示式就是在学习一些特殊符号的使用

具体操作功能:1.匹配:String matches方法,此方法匹配整个字符串
                          2.切割:String split方法

*/

class Regex
{
        public static void main(String[] args)
        {
                //匹配
                //checkQQ_1();
                //checkTel();
               
                /*
                //切割
                splitDemo("asvxs     asdsa       asas  dsvdsv  ds"," +");                //以一个或多个空格切割
                splitDemo("asdsad.asdsad.asdsadeg.oiji","\\.");                //以符号"."切割,这个符号在正则表达式中是特殊符号,
                                                                                                                        //不能直接使用,必须用转义字符"\",但是使用一个有
                                                                                                                        //歧义,所以还要再加一个"\"
                splitDemo("c:\\windows\\system32\\123.jpg","\\\\");                //此处直接使用"\\"分隔因"\"特性会有歧义,所以
                                                                                                                                //各用一个"\"转义达到目的

                //下面使用叠词完成切割,为了可以让规则的结果被重用,可以将规则封装为一个组,用()完成,组的出现都有编号
                //从1开始,想要使用已有的组可以通过\n(n为组的编号)的形式来获取,组的编号及数目从左向右计数即可,此处
                //教学视频详见25天第3讲
                splitDemo("wefsdffmffffiniooopowwklj","(.)\\1+");
                */

                //替换
                String str ="asx161a648848asx31684684a1sx741xas2168464asxas";
                replaceAll(str,"\\d{5,}","#");                //将字符串中含有5个以上数字的部分替换为#

                String str1 ="wefsdffmffffiniooopowwklj";                //将字符串中的叠词替换为*
                replaceAll(str1,"(.)\\1+","*");                //此处的1与组封装在一个字符串内

                String str2 ="wefsdffmffffiniooopowwklj";                //将字符串中的叠词替换为相应叠词的单个字符
                replaceAll(str2,"(.)\\1+","$1");        //此处使用特殊符号"$",代表引用字符串中的组,后边的1代表前边的1组,       
                                                                                        //若无数字代表默认整个字符串为组,通过这个符号可实现上边的要求,注
                                                                                        //意:此处的组的编号与组分离被封装在另一个字符串中
        }

        //替换练习
        public static void replaceAll(String str, String regex, String newstr)
        {
                str = str.replaceAll(regex,newstr);
                System.out.println(str);
        }

        //切割练习:
        public static void splitDemo(String str, String regex)
        {
                String[] arr = str.split(regex);
                for(String s : arr)
                {
                        System.out.println(s);
                }
        }

        //匹配练习:对电话号码进行校验,要求,只能是13xxx、15xxx、18xxx号段
        public static void checkTel()
        {
                String tel = "13598758964";
                String telregex = "1[358]\\d{9}";                //此处不能直接使用正则表达式的符号"\d",必须增加一个"\",因为前
                                                                                                //者中的"\"会将"d"转义,使得其成为两个符号,从而失去作用
                boolean flag = tel.matches(telregex);
                if(flag)
                        System.out.println("手机号正确:"+tel);
                else
                        System.out.println("手机号有误");
        }
       
        /*
        练习:对qq号码进行校验,要求:不能以0开头,5~15位的数字
        */
        public static void checkQQ_1()                //使用正则表达式进行校验
        {
                String qq = "34564161561";
                String regex = "[1-9][0-9]{4,14}";
                boolean flag = qq.matches(regex);
                if(flag)
                        System.out.println("qq号正确:"+qq);
                else
                        System.out.println("qq号有误");
        }

        public static void checkQQ_2()                //多重判断组合
        {
                String qq = "34564161561";
                if (qq.length()>=5&&qq.length()<=15)
                {
                        if (!qq.startsWith("0"))
                        {
                                boolean flag = true;
                                try
                                {
                                        long l = Long.parseLong(qq);
                                        System.out.println("qq号正确:"+qq);
                                }
                                catch (NumberFormatException e)
                                {
                                        System.out.println("qq号中出现非法字符");
                                }
                        }
                        else
                                System.out.println("qq号码不能以0开头");
                }
                else
                        System.out.println("长度错误");
        }
}

作者: Messing    时间: 2015-9-5 16:07
{:2_32:}{:2_32:}{:2_32:}v
作者: a80C51    时间: 2015-9-5 16:29
写的很多,挺不错。。。




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