正则表达式

 概念

matches方法是字符串提供的方法,是可以让字符串对象与送进来的正则表达式进行匹配,如果匹配成功则返回true,反之返回false。

初体验



public class RegexTest1 {
    public static void main(String[] args) {
        System.out.println(checkQQ(null));
        System.out.println(checkQQ("1008611011"));
        System.out.println(checkQQ("100861weq11"));
        System.out.println("------------------------------------------");

        System.out.println(checkQQ1(null));
        System.out.println(checkQQ1("1008611011"));
        System.out.println(checkQQ1("100861weq11"));

    }

    //使用正则表达式
    public static boolean checkQQ1(String qq){
        return qq != null && qq.matches("[1-9]\\d{5,19}");//(反斜杠\\d)\\d代表全部要是数字
        //qq号码的第一位必须是1-9之间的数字不能是0,
        // 剩下的数字用(反斜杠反斜杠)\\d代表剩下的数字,位数用(大括号){5-19},和第一位加起来就是6-20之间
    }
    public static boolean checkQQ(String qq) {
        //1.判断qq号码是否为null
        if (qq == null || qq.startsWith("0") || qq.length() < 6 || qq.length() > 20) {
            return false;
        }

        //2.满足以上条件之后,判断qq号码是不是都是数字
        //遍历里面每一个字符,只要里面有一个不是数字,那就说明不满足要求
        for (int i = 0; i < qq.length(); i++) {
            //根据索引提取当前位置处的字符
            char ch = qq.charAt(i);//根据索引提取字符
            //判断ch记住的字符,如果不是数字,qq号码就不合法
            if (ch < '0' || ch > '9'){
                return false;
            }
        }
        //3.程序走到这里,说明qq号是合法的,前面不满足条件的都被拦截了
        return true;

    }
}

书写规则 

代码演示:

注意点:在java中\(一个反斜杠)是有特殊用途(意义)的,例如\n , \t 整体被当作一个字符看分别表示换行、缩进,同理如果在使用正则表达式时候写\d(一个反斜杠d)会被当做一个整体看待,但是由于没有\d这个字符,就会报错;如果就希望把\(一个反斜杠)当反斜杠看待,要告诉他这个反斜杠就是个杠(比较绕),需要再在\前面加一个\(反斜杠),再最后和d在一起才会是真正意义上的\d。 (而不把\d当作一个整体来解析,会当成一个\d来解析)所以在使用时候需要转义!

总结: 

应用案例 

需求:
校验用户输入的电话、邮箱、时间是否合法

 



import java.util.Scanner;

public class RegexTest3 {
    public static void main(String[] args) {
        checkPhone();
        checkEmile();
        checkTime();
    }

    private static void checkPhone() {
        while (true) {//将这段代码ctrl+alt+t放在一段死循环中(while(true))
            System.out.println("请输入您的电话号码(手机或座机):");
            Scanner sc = new Scanner(System.in);//用户输入
            String phone = sc.nextLine();//接收一行数据,代表接收一行用户输入的号码
            //phone变量里面就是记住用户输入的号码,再调用matches方法("校验号码的正则表达式")

            //用户输入的号码可能是:手机号1324749832/座机号010-2222222 0102222222
            if (phone.matches("(1[3-9]\\d{9})|(0\\d{2,7}-?[1-9]\\d{4,19})")) {
                System.out.println("您输入的号码格式正确。");
                break;//如果输入的号码与正则表达式匹配的成功了就跳出循环
            } else {
                System.out.println("您输入的号码格式错误,请重新输入:");
            }
        }
    }

    private static void checkEmile() {
        while (true) {
            System.out.println("请输入您的邮箱:");
            Scanner sc = new Scanner(System.in);
            String emile = sc.nextLine();//接收一行数据,代表接收一行用户输入的邮箱
            //emile变量里面就是记住用户输入的邮箱,再调用matches方法("校验邮箱的正则表达式")
            /**
             * daw190310@163.com
             * 1738842@qq.com
             * itheima@itcast.com.cn
             */
            //\\w数字字母下划线 (. ---> \\.)
            //(\.\w{2,10}){1,2}表示后面域名可以出现一次或两次
            if (emile.matches("\\w{2,}@\\w{2,20}(\\.\\w{2,10}){1,2}")) {
                System.out.println("您输入的邮箱格式正确。");
                break;
            } else {
                System.out.println("您输入的邮箱格式错误,请重新输入:");
            }
        }
    }

    private static void checkTime() {
        while (true) {
            System.out.println("请您输入时间:");
            Scanner sc = new Scanner(System.in);
            String time = sc.nextLine();//接收一行数据,代表接收一行用户输入的时间
            //time变量里面就是记住用户输入的邮箱,再调用matches方法("校验时间的正则表达式")
            /**
             * 2023-10-1 12:24:43
             * 2023-10-1
             * 12:23:34
             * 10-1 12:21
             */
            //\d*-\d[1-12]-\d[1-31] \d[1-24](:\d[00-59]){1,2}自己没写完 发现想得出来写不出来
            if (time.matches("^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)\\s+([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$")) {
                System.out.println("您输入的时间格式正确。");
                break;
            } else {
                System.out.println("您输入的时间格式错误,请重新输入:");
            }
        }
    }
}

用于查找信息

作用一:用来校验数据格式是否合法
作用二:在一段文本中查找满足要求的内容

 

用于搜索替换、分割内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值