【Java常用API】正则表达式练习

复制代码
🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

请使用正则表达式完成如下需求

练习题1,需求如下:

练习题2,需求如下:

正则表达式总结


请使用正则表达式完成如下需求

练习题1,需求如下:

请编写正则表达式验证用户输入的手机号码是否满足要求

请编写正则表达式验证用户输入的邮箱号是否满足要求。

请编写正则表达式验证用户输入的电话号码是否满足要求。

java 复制代码
package Regex;

public class demon4 {
    public static <string> void main(String[] args) {
                /*
            需求
            请编写正则表达式验证用户输入的手机号码是否满足要求。请编写正则表达式验证用户输入的邮箱号是否满足要求。请编写正则表达式验证用户输入的电话号码是否满足要求。
            验证手机号码 13112345678 13712345667 13945679027 139456790271
            验证座机电话号码 020-2324242 02122442 027-42424 0712-3242434
            验证邮箱号码 3232323@qq.com zhangsan@itcast.cnn dlei0009@163.com dlei0009@pci.com.cn
        */

        //心得:
        //拿着一个正确的数据,从左到右依次去写。
        //13112345678
        //分成三部分:
        //第一部分:1 表示手机号码只能以1开头
        //第二部分:[3-9] 表示手机号码第二位只能是3-9之间的
        //第三部分:\\d{9} 表示任意数字可以出现9次,也只能出现9次
        String regex1 = "1[3-9]\\d{9}";
        System.out.println("13112345678".matches(regex1));
        System.out.println("13712345667".matches(regex1));

        System.out.println("-------------------------------------------------------");

        //座机电话号码
        //020-2324242 02122442 027-42424 0712-3242434
        //思路:
        //在书写座机号正则的时候需要把正确的数据分为三部分
        //一:区号0\\d{2,3}
        //      0:表示区号一定是以0开头的
        //      \\d{2,3}:表示区号从第二位开始可以是任意的数字,可以出现2到3次。
        //二:-   ?表示次数,0次或一次
        //三:号码  号码的第一位也不能以0开头,从第二位开始可以是任意的数字,号码的总长度:5-10位
        String regex2 = "0\\d{2,3}-?[1,9]\\d{4,9}";
        System.out.println("020-2324242".matches(regex2));
        System.out.println("0712-3242434".matches(regex2));
        System.out.println("02122442".matches(regex2));

        System.out.println("------------------------------------------------");


        //邮箱号码
        //3232323@qq.com zhangsan@itcast.cnn dlei0009@163.com dlei0009@pci.com.cn
        //思路:
        //在书写邮箱号码正则的时候需要把正确的数据分为三部分
        //第一部分:@的左边 \\w+
        //      任意的字母数字下划线,至少出现一次就可以了
        //第二部分:@ 只能出现一次
        //第三部分:
        //      3.1         .的左边[\\w&&[^_]]{2,6}
        //                  任意的字母加数字,总共出现2-6次(此时不能出现下划线)
        //      3.2         . \\.
        //      3.3         大写字母,小写字母都可以,只能出现2-3次[a-zA-Z]{2,3}
        //      我们可以把3.2和3.3看成一组,这一组可以出现1次或者两次
        String regex3 = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3})(1,2)";
        System.out.println("3232323@qq.com".matches(regex3));
        System.out.println("zhangsan@itcast.cnn".matches(regex3));
        System.out.println("dlei0009@pci.com.cn".matches(regex3));

        System.out.println("--------------------------------------------");


        //24小时的正则表达式
        String regex4 = "([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";
        System.out.println("23:11:02".matches(regex4));
    }
}

练习题2,需求如下:

  • 请编写正则表达式验证用户名是否满足要求。

    要求:大小写字母,数字,下划线一共4-16位

  • 请编写正则表达式验证身份证号码是否满足要求。

    简单要求:18位,前17位任意数字,最后一位可以是数字可以是大写或小写的x

    复杂要求:按照身份证号码的格式严格要求。

练习代码如下:

java 复制代码
package Regex;

public class demon5 {
    public static void main(String[] args) {
                /*
            正则表达式练习:
            需求
            请编写正则表达式验证用户名是否满足要求。要求:大小写字母,数字,下划线一共4-16位请编写正则表达式验证身份证号码是否满足要求。
            简单要求:18位,前17位任意数字,最后一位可以是数字可以是大写或小写的x复杂要求:按照身份证号码的格式严格要求。

            身份证号码:
            41080119930228457x
            510801197609022309
            15040119810705387X
            130133197204039024 I
            430102197606046442
        */

        //用户名要求:大小写字母,数字,下划线一共4-16位
        String regex1 = "\\w{4,16}";
        System.out.println("zhangsan".matches(regex1));
        System.out.println("@qwsd".matches(regex1));
        System.out.println("zhan_an".matches(regex1));

        System.out.println("--------------------------------");

        //身份证号码的简单校验
        //18位,前17位任意数字,最后一位可以是数字可以是大写或小写的x
        String regex2 = "[1-9]\\d{16}(\\d|X|x)";
        System.out.println("41080119930228457x".matches(regex2));
        System.out.println("510801197609022309".matches(regex2));
        System.out.println("15040119810705387X".matches(regex2));
        System.out.println("430102197606046442".matches(regex2));


        //忽略大小写的书写方式
        //在匹配的时候忽略abc的大小写
        String regex3 = "(?i)abc";
        System.out.println("--------------");
        System.out.println("ABC".matches(regex3));//true
        System.out.println("AbC".matches(regex3));//true


        //身份证号码的严格校验
        //编写正则的小心得:
        //第一步:按照正确的数据进行拆分
        //第二步:找每一部分的规律,并编写正则表达式
        //第三步:把每一部分的正则拼接在一起,就是最终的结果
        //书写的时候:从左到右去书写。

        //410801 1993 02 28 457x
        //前面6位:省份,市区,派出所等信息,第一位不能是0,后面5位是任意数字        [1-9]\\d{5}
        //年的前半段: 18 19 20                                             (18|19|20))
        //年的后半段: 任意数字出现两次                                         \\d{2}
        //月份: 01~ 09 10 11 12                                            (0[1-9]1[0-2])
        //日期: 01~09 10~19 20~29 30 31                                     (0[1-9]|[12]\\d|3[01])
        //后面四位: 任意数字出现3次 最后一位可以是数字也可以是大写x或者小写x           \\d{3}[\\dXx]
        String regex4 = "[1-9]\\d{5}(18|19|20))\\d{2}(0[1-9]1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]";
        System.out.println("----------------------------------");
        System.out.println("41080119930228457x".matches(regex2));
        System.out.println("510801197609022309".matches(regex2));
        System.out.println("15040119810705387X".matches(regex2));
        System.out.println("430102197606046442".matches(regex2));
        
    }
}

正则表达式总结

相关推荐
摇滚侠8 分钟前
面试实战 问题三十四 对称加密 和 非对称加密 spring 拦截器 spring 过滤器
java·spring·面试
xqqxqxxq9 分钟前
Java 集合框架之线性表(List)实现技术笔记
java·笔记·python
L0CK17 分钟前
RESTful风格解析
java
程序员小假27 分钟前
我们来说说 ThreadLocal 的原理,使用场景及内存泄漏问题
java·后端
何中应29 分钟前
LinkedHashMap使用
java·后端·缓存
tryxr37 分钟前
Java 多线程标志位的使用
java·开发语言·volatile·内存可见性·标志位
talenteddriver42 分钟前
java: Java8以后hashmap扩容后根据高位确定元素新位置
java·算法·哈希算法
云泽80844 分钟前
STL容器性能探秘:stack、queue、deque的实现与CPU缓存命中率优化
java·c++·缓存
zhengfei6111 小时前
渗透工具集——15款常见C2的框架
测试工具·安全
yyy(十一月限定版)1 小时前
c语言——栈和队列
java·开发语言·数据结构