正则表达式及相关案例

一、逻辑运算符

逻辑运算符含义
&&并且
|或者
//需求: 按照如下要求,使用正则表达式,完成字符串内容的验证。
//1、验证字符串是小写辅音字符开头,后跟ad 除了a,e,i,o,u之外,其他的都是辅音字母
//2、验证字符串是aeiou 中的某个字符开头,后跟ad。
        String redex="[[a-z]&&[^aeiou]]ad";
        String redex1="[a|e|i|o|u]ad";
        //String redex1 = "[aeiou]ad";
        String str="bad";
        String str1="aad";
        System.out.println(str.matches(redex));
        System.out.println(str1.matches(redex));
        System.out.println("--------------");
        String str2="aad";
        System.out.println(str2.matches(redex1));

二、数量词

数量词含义
X?0次或1次
X*0次到多次
X+1次或多次
X{n}恰好n次
X{n,}至少n次
X{n,m}n到m次(n和m都是包含的)
//需求: 按照如下要求,使用正则表达式,完成字符串内容的验证
//1.验证str是否是三位数字
//2.验证str是否是多位数字:最少一位
//3.验证str 是否是手机号
        String regex="\\d{3}";
        String regex1="\\d+";
        String regex2="1[358]\\d{9}";
        String s="123";
        String s1="1234";
        System.out.println(s.matches(regex));
        System.out.println(s1.matches(regex));
        System.out.println("---------------");
        String s2="";
        String s3="1234";
        System.out.println(s2.matches(regex1));
        System.out.println(s3.matches(regex1));
        System.out.println("---------------");
        String s4 = "13637326896";
        String s5 = "1234";
        System.out.println(s4.matches(regex2));
        System.out.println(s5.matches(regex2));

三、预定义字符

预定义字符含义
“\d”任何数字[0-9]的简写
“\D”任何非数字[^0-9]的简写
“\s”空白字符: [ \t\n\x0B \f\r] 的简写
“\s”非空白字符[^\s] 的简写
“\w”单词字符: [a-zA-Z_0-9]的简写
“\W”非单词字符: [^\w] 的简写
“.”匹配任何字符。如果要表示一个字符点,那么就得使用 \.
//需求: 按照如下要求,使用正则表达式,完成字符串内容的验证
//1、验证str是否是3位数宁
//2、验证手机号: 1开头,第二位: 3/5/8,剩下9位都是0-9的数字
//3、验证字符串是否以h开头,以d结尾,中间是任何字符
//4、验证str是否是: had.
        Scanner sc = new Scanner(System.in);
        String regex="\\d\\d\\d";
        String regex1="1[3|5|8]\\d\\d\\d\\d\\d\\d\\d\\d\\d";
        String regex2="h.d";
        String regex3="had\\.";

        while (true) {
            System.out.println("请输入一个字符串:");
            String str=sc.next();
            System.out.println(str.matches(regex));
            System.out.println(str.matches(regex1));
            System.out.println(str.matches(regex2));
            System.out.println(str.matches(regex3));
        }

四、字符类

字符类含义
[abc]代表a或者b,或者c字符中的一个
[^abc]代表除abc以外的任何字符
[a-z]代表a-z的所有小写字符中的一个
[A-Z]代表A-Z的所有大写字符中的一个
[0-9]代表0-9之间的某一个数字字符
[a-zA-Z0-9]代表a-z或者A-Z或者0-9之间的任意一个字符
[a-dm-p]a-d或m-p之间的任意一个字符
//需求:
//验证str是否以h开头,以d结尾,中间是a,e,i,o,u中某个字符
//验证str是否以h开头,以d结尾,中间不是a,e,i,o,u中的某个字符
//验证str是否a-z的任何一个小写字符开头,后跟ad
//验证str是否以a-d或者m-p之间某个字符开头,后跟ad
        Scanner sc = new Scanner(System.in);
        String redex="h[aeiou]d";
        String redex1="h[^aeiou]d";
        String redex2="[a-z]ad";
        String redex3="[a-dm-p]ad";
        while (true) {
            System.out.println("请输入一个字符串:");
            String str=sc.next();
            System.out.println(str.matches(redex));
            System.out.println(str.matches(redex1));
            System.out.println(str.matches(redex2));
            System.out.println(str.matches(redex3));
        }

五、分组

分组语法含义
()将一系列操作作为一个整体来理解
//1.需求:按照如下要求,使用正则表达式,完成"DG8FV-B9TKY-FRT9J-99899-XPQ4G"序列号字符串内容的验证
//2.验证小数:要求匹配:3、3.0、3.14、+3.14、-3.0

        //DG8FV-B9TKY-FRT9J-99899-XPQ4G
        //初级思路:[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}
        //错误思路:[[A-Z0-9]{5}-]{4}[A-Z0-9]{5}
        String regex="([A-Z0-9]{5}-){4}[A-Z0-9]{5}";
        String s="DG8FV-B9TKY-FRT9J-99899-XPQ4G";
        System.out.println(s.matches(regex));

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

        //3、3.0、3.14、+3.14、-3.0
        String regex1="[+-]?3(\\.\\d+)?";
        System.out.println("3".matches(regex1));
        System.out.println("+3".matches(regex1));
        System.out.println("-3.0".matches(regex1));
        System.out.println("3..".matches(regex1));
        System.out.println("3.20".matches(regex1));
        System.out.println("+3.3.5".matches(regex1));

六、实例

需求1: 使用String中的split方法,将字符串"18 4 567 99 56"以间隔进行分割。
需求2: 使用String中的replaceALL方法,将"fdk432fdk2k2435447ik5L31324"中的数字使用*进行替换。


        //一个或者多个空格为切割条件
        String regex=" +";
        String[] arr="18 4 567      99           56".split(regex);
        System.out.println(Arrays.toString(arr));

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

        //应用场景:游戏中的聊天说脏话
        String regex1="\\d";
        String s="fdk432fdk2k2435447ik5L31324".replaceAll(regex1,"*");
        System.out.println(s);

        String regex2="\\d+";
        String s1="fdk432fdk2k2435447ik5L31324".replaceAll(regex2,"**");
        System.out.println(s1);

七、总结

普通方法和正则表达式的区别所在,实例为:
需求
分别使用if语句和正则表达式,对用户输入一个qq号码做验证操作。要求同时符合以下三个规则才算通过验证。
规则①:qq号码必须是5-15位长度
规则②:而且首位不能为0
规则③:而且必须全是数字

方法一:

public static void method1() {
    String qq="3179640391";
    //注意逻辑上的问题,一开始应该为true。即一开始用户输入QQ号的时候就认为符合规则,
    // 再去根据条件判断是否满足规则,不满足就直接验证不通过。
    boolean flag=true;
    //如果不满足条件就变成false
    if (!(qq.length()>=5&&qq.length()<=15)){
        flag=false;
    }
    //如果不满足条件就变成false
    if (!(flag==true&&qq.charAt(0)!='0')){
        flag=false;
    }
    //如果不满足条件就变成false
    for (int i = 0; i < qq.length(); i++) {
        if (!(qq.charAt(i)>='0'&&qq.charAt(i)<='9')){
            flag=false;
            //有一个数字不符合规则立刻结束验证
            break;
        }
    }
    if (flag==true){
        System.out.println(qq+"验证通过~");
    }
}

方法二:

public static void method2(){
    //规则1:qq号码必须是5-15位长度
    //规则2:而且首位不能为0
    //规则3:而且必须全是数字
    String qq="3172798717";
    boolean flag=false;
    if (qq.length()>=5&&qq.length()<=15){
        if (qq.charAt(0)!='0'){
            for (int i = 0; i < qq.length(); i++) {
                if (!(qq.charAt(i)>='0'&&qq.charAt(i)<='9')){
                    flag=false;
                    break;
                }else {
                    flag=true;
                }
            }
        }else {
            flag=false;
        }
    }else {
        flag=false;
    }
    if (flag==true) {
        System.out.println(qq+"验证通过~");
    }
}

测试代码:

public static void main(String[] args) {
    //分别使用if语句和正则表达式,对用户输入一个qq号码做验证操作。要求同时符合以下三个规则才算通过验证
    //规则1:qq号码必须是5-15位长度
    //规则2:而且首位不能为0
    //规则3:而且必须全是数字
    //method1();
    method2();

    //正则表达式
    String qq="3179640391";
    String regex="[1-9][0-9]{4,14}";
    //System.out.println(qq.matches(regex));

}
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值