Java正则表达式

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;
    }
}

正则表达式的匹配规则

字符类(默认匹配一个字符)
Java正则表达式_第1张图片
预定义的字符类(默认匹配一个字符)
Java正则表达式_第2张图片
贪婪的量词(配合匹配多个字符)
Java正则表达式_第3张图片
字符串提供了匹配正则表达式规则的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();
        // 判断手机号码的格式是否正确 格式:[email protected]  [email protected]  [email protected]
        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);
        }
    }
}

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

Java正则表达式_第4张图片

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,或者联系邮箱" +
                "[email protected],电话13345678901,02043422433" +
                "邮箱[email protected],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);
        }
    }
}

你可能感兴趣的:(java,java,正则表达式,开发语言)