Java正则表达式

正则表达式概述、初体验

正则表示:
正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。
正则表达式初体验:
需求:假如现在要求校验一个qq号码是否正确,6位及20位之内,必须全部是数字。
先使用目前所学知识完成校验需求;然后体验一下正则表达式校验。

package snow.d6_regex;

public class RegexDemo {
    public static void main(String[] args) {
        // 需求,校验qq号码,必须全部数字6-20位
        System.out.println(checkQQ("251425998"));
        System.out.println(checkQQ1("251425998"));
    }
    public static boolean checkQQ1(String qq){
        return qq!=null && qq.matches("\\d{6,20}");
    }
    public static boolean checkQQ(String qq){
        // 判断qq号码的长度是否满足要求
        if(qq == null || qq.length()<6  || qq.length()>20){
            return false;
        }
        //判断qq中是否全部是数字,不是返回false
        for (int i = 0; i < qq.length(); i++) {
            // 获取每位字符
            char ch = qq.charAt(i);
            // 判断这个字符是否不是数字,不是数字直接返回false
            if(ch < '0'||ch > '9'){
                return false;
            }
        }
        return true;
    }
}

正则表达式的匹配规则

字符类(默认匹配一个字符)
在这里插入图片描述
预定义的字符类(默认匹配一个字符)
在这里插入图片描述
贪婪的量词(配合匹配多个字符)
在这里插入图片描述
字符串提供了匹配正则表达式规则的API
在这里插入图片描述

package snow.d6_regex;

public class RegexDemo1 {
    public static void main(String[] args) {
        // 只包含a或b或c一个字符
        System.out.println("a".matches("[abc]")); // true
        // 不能包含a或b或c字符
        System.out.println("d".matches("[^abc]")); // true
        // 任何一个字符
        System.out.println("aa".matches(".")); // false
        // 一个空白字符
        System.out.println("a b".matches(".\\s."));// true
        // 一个数字或英文或下划线
        System.out.println("1a_".matches("\\w\\w\\w")); // true
        // 一个数字
        System.out.println("1".matches("\\d")); // true
        // 校验密码 必须包含数字和字母和下划线至少6位
        System.out.println("83__sd".matches("\\w{6,}")); //true
        // 验证码 必须是数字和字母 必须是4位
        System.out.println("a2s2".matches("[a-zA-Z0-9]{4}")); //true
        System.out.println("acd2".matches("[\\w&&[^_]]{4}")); //true
    }
}

正则表达式的常见案例

案例一:请使用正则表达式完成需求
需求:
1.请编写程序模拟用户输入手机号码、验证格式正确,并给出提示,直到格式输入正确为止。
2.请编写程序模拟用户输入邮箱号码、验证格式正确,并给出提示,直到格式输入正确为止。
3.请编写程序模拟用户输入电话号码、验证格式正确,并给出提示,直到格式输入正确为止。
分析:
定义方法,接受用户输入的数据,使用正则表达式完成检验,并给出提示。

package snow.d6_regex;
import java.util.Scanner;

public class RegexDemojy {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        // 校验手机号码、邮箱、电话号码、金额
        checkPhone(sc);
        checkEmail(sc);
        checkTel(sc);
        checkmoney(sc);
    }
    // 手机号码校验
    public static void checkPhone(Scanner sc){
        System.out.println("请您输入您的手机号码:");
        String phone = sc.next();
        // 判断手机号码的格式是否正确
        if(phone.matches("1[3-9]\\d{9}")){
            System.out.println("手机号码格式正确!");
        }else {
            System.out.println("手机号码有误!");
            checkPhone(sc);
        }
    }
    // 邮箱校验
    public static void checkEmail(Scanner sc){
        System.out.println("请您输入您的邮箱:");
        String email = sc.next();
        // 判断手机号码的格式是否正确 格式:123455@qq.com  123455@163.com  123455@pci.com.cn
        if(email.matches("\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2}")){
            System.out.println("邮箱格式正确!");
        }else {
            System.out.println("邮箱有误!");
            checkEmail(sc);
        }
    }
    // 电话号码校验
    public static void checkTel(Scanner sc){
        System.out.println("请您输入您的电话号码:");
        String tel = sc.next();
        // 判断手机号码的格式是否正确
        if(tel.matches("0\\d{2,6}-?\\d{8,20}")){
            System.out.println("电话号码格式正确!");
        }else {
            System.out.println("电话号码有误!");
            checkTel(sc);
        }
    }
    // 校验金额
    public static void checkmoney(Scanner sc){
        System.out.println("请您输入您的金额:");
        String money = sc.next();
        // 判断手机号码的格式是否正确
        if(money.matches("\\d{1,}(\\.\\d{1,2})?")){
            System.out.println("金额格式正确!");
        }else {
            System.out.println("金额格式有误!");
            checkmoney(sc);
        }
    }
}

正则表达式在方法中的应用

在这里插入图片描述

package snow.d6_regex;

public class RegexDemo2 {
    public static void main(String[] args) {
        String names = "瑞瑞djdjjd云云dfsdakdsdhw勇勇";
        String[] arrs = names.split("\\w+");
        for (int i = 0; i < arrs.length; i++) {
            System.out.println(arrs[i]); //瑞瑞 \n云云 \n勇勇
        }
        String name = names.replaceAll("\\w+", " ");
        System.out.println(name); //瑞瑞 云云 勇勇
    }
}

正则表达式爬取信息

package snow.d6_regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        String rs = "程序学习Java,电话020-43422433,或者联系邮箱" +
                "snow@dream.cn,电话13345678901,02043422433" +
                "邮箱dream@snow.cn,400-100-4534,4001004534";
        // 从上面内容中获取电话号码和邮箱
        // 定义规则
        String regex = "(\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2})" +
                "|(1[3-9]\\d{9})|(0\\d{2,6}-?\\d{8,20})|(400-?\\d{3,9}-?\\d{3,9})";
        // 编译规则为匹配对象
        Pattern pattern = Pattern.compile(regex);
        // 得到一个内容匹配器对象
        Matcher matcher = pattern.matcher(rs);
        // 开始寻找
        while (matcher.find()){
            String rs1 = matcher.group();
            System.out.println(rs1);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值