• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Java_正则表达式_14

武飞扬头像
沐鑫本鑫
帮助1

正则表达式

  1. 正则表达式的作用:
    是一些特殊字符组成的校验规则,可以校验信息的正确性,校验邮箱是否合法,电话号码,金额等。

    需求:演示不用正则表达式和用正则表达式校验QQ号码。

    小结:
    正则表达式很适合做校验,代码简单,优雅!

public class RegexDemo {
    public static void main(String[] args) {
        System.out.println(checkQQ("42422332"));
        System.out.println(chechQQRegex("42422d332"));
    }

    // 用正则表达式
    public static boolean chechQQRegex(String qq){
        return qq!=null && qq.matches("\\d{4,}");  //\d是数字型,且不小于4位
    }

    // 演示不用正则表达式
    public static boolean checkQQ(String qq){
        // 1.判断是否为null
        if(qq == null){
            return false;
        }else{
            // 2.判断长度是否
            if(qq.length() >= 4){
                // 3.判断是否全部是数字
                // 先定义一个变量存储最终校验的结果
                boolean rs = true ; // 默认认为合法!
                // 4.遍历字符串中的每个字符
                for(int i = 0 ; i < qq.length() ; i   ){
                    char ch = qq.charAt(i);
                    if(ch < '0' || ch > '9'){
                        rs = false ; // 不合法!!
                    }
                }
                return rs;
            }else{
                return false;
            }
        }
    }
}
学新通

使用

  1. 字符类
    [abc] a、b 或 c(简单类)
    [^abc] 任何字符,除了 a、b 或 c(否定)
    [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
    [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
    [a-z&&[def23]] d、e 或 f(交集)
    [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
    [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)

  2. 预定义字符类
    . 任何字符
    \d 数字:[0-9]
    \D 非数字: [^0-9]
    \s 空白字符:[ \t\n\x0B\f\r]
    \S 非空白字符:[^\s]
    \w 单词字符:[a-zA-Z_0-9]
    \W 非单词字符:[^\w]

以上正则匹配只能校验单个字符。

Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

public class RegexDemo02 {
    public static void main(String[] args) {
        //public boolean matches(String regex):判断是否与正则表达式匹配,匹配返回true
        // 只能是 a  b  c
        System.out.println("a".matches("[abc]")); // true
        System.out.println("z".matches("[abc]")); // false

        // 不能出现a  b  c
        System.out.println("a".matches("[^abc]")); // false
        System.out.println("z".matches("[^abc]")); // true

        System.out.println("a".matches("\\d")); // false
        System.out.println("3".matches("\\d")); // true
        System.out.println("333".matches("\\d")); // false   只能校验一个
        System.out.println("z".matches("\\w")); // true  \w代表数字或字母
        System.out.println("2".matches("\\w")); // true
        System.out.println("21".matches("\\w")); // false
        System.out.println("你".matches("\\w")); // false
        //  以上正则匹配只能校验单个字符。

        // 校验密码
        // 必须是数字 字母 下划线 至少 6位
        System.out.println("ssds3c".matches("\\w{6,}")); // true
        System.out.println("ssdsc".matches("\\w{6,}")); // false
        System.out.println("ssdsda232s你c".matches("\\w{6,}")); // false

        // 验证。必须是数字和字符  必须是4位
        System.out.println("dsd2".matches("[a-zA-Z0-9]{4}")); // true
        System.out.println("A3dy".matches("[a-zA-Z0-9]{4}")); // true
        System.out.println("A3dy2".matches("[a-zA-Z0-9]{4}")); // false

    }
}
学新通

应用

实际运用:

public class RegexDemo03 {
    public static void main(String[] args) {
        //checkEmail();
        //checkTel();
        //checkPhone();
    }

    private static void checkPhone() {
        Scanner sc = new Scanner(System.in);
        System.out.print("请您输入电话号码:");
        String phone = sc.nextLine();
        if(phone.matches("0\\d{2,5}-?\\d{5,15}")){
            System.out.println("电话号码合法了!");
        }else{
            System.err.println("电话号码不正确!");
        }
    }


    private static void checkTel() {
        Scanner sc = new Scanner(System.in);
        System.out.print("请您输入手机号码:");
        String tel = sc.nextLine();
        if(tel.matches("1[3-9]\\d{9}")){
            System.out.println("手机号码合法了!");
        }else{
            System.err.println("手机号码不正确!");
        }
    }

    // 校验邮箱
    public static void checkEmail(){
        Scanner sc = new Scanner(System.in);
        System.out.print("请您输入邮箱:");
        String email = sc.nextLine();
        // 3232323@qq.com
        // dlei082@163.com
        // dlei@pic.com.cn
        if(email.matches("\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2}")){
            System.out.println("邮箱合法了!");
        }else{
            System.err.println("邮箱格式不正确!");
        }
    }
}
学新通

Split_replaceAll

public String[] split(String regex):
– 按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。
public String replaceAll(String regex,String newStr)
– 按照正则表达式匹配的内容进行替换

public class RegexDemo01 {                     //以,分割
    public static void main(String[] args){
        //1.split的基本用法
        String names = "张,魏,王";
        String[] nameArrs = names.split(",");
        for(int i = 0;i < nameArrs.length;i   ){
            String name = nameArrs[i];
            System.out.println(name);
                 //2.结合正则表达式分割
        String names01 = "张123魏abc王4da";
        //以匹配的正则表达式内容为分割
        String[] nameArrs01 = names01.split("\\w ");
        for(int i = 0;i < nameArrs01.length;i   ){
            System.out.println(nameArrs01[i]);
        }
        //replaceAll
        String names02 = "张123魏abc王4da";
        System.out.println(names02.replaceAll("\\w ","/"));
        }
    } }
学新通

正则表达式爬取信息中的内容(了解)

public class RegexDemo05 {
    public static void main(String[] args) {
        String rs = "来黑马程序学习Java,电话020-43422424,或者联系邮箱"  
                "itcast@itcast.cn,电话18762832633,0203232323"  
                "邮箱bozai@itcast.cn,400-100-3233 ,4001003232";
        // 需求:从上面的内容中爬取出 电话号码和邮箱。
        // 1.定义爬取规则
        String regex = "(\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2})|(1[3-9]\\d{9})|(0\\d{2,5}-?\\d{5,15})|400-?\\d{3,8}-?\\d{3,8}";
        // 2.编译正则表达式成为一个匹配规则对象
        Pattern pattern = Pattern.compile(regex);
        // 3.通过匹配规则对象得到一个匹配数据内容的匹配器对象
        Matcher matcher = pattern.matcher(rs);
        // 4.通过匹配器去内容中爬取出信息
        while(matcher.find()){
            System.out.println(matcher.group());
        }

    }
}
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfeijc
系列文章
更多 icon
同类精品
更多 icon
继续加载