您现在的位置是:首页 > 正文

正则表达式

2024-04-01 03:15:30阅读 0

正则表达式

作用

  • 可用一些规定的字符来制定规则,并用来检验数据格式的合法性

正则表达式初体验

**问题:**校验一个qq号码是否正确,6位及20位之内,必须全部是数字 。

**解题思路:**现有知识解决,在使用正则表达式体验

public class RegexDemo01 {
    public static void main(String[] args) {
        /*
            校验一个qq号码是否正确,6位及20位之内,必须全部是数字 。
         */
        System.out.println(checkQQ("123144"));
        System.out.println(checkQQ("sjfj2323"));
        System.out.println(checkQQ("fjs2"));
       // 正则表达式
        System.out.println(checkQQByRegex("jfsie32223"));
        System.out.println(checkQQByRegex("232343"));
    }
    public static boolean checkQQByRegex(String qq){
        // String类中提供了matches()方法,对正则表达式进行匹配 \d:表示数字 在Java中单斜杠要加转义字符 \,表示单斜杠
        return qq != null && qq.matches("\\d{6,20}");
    }
    public static boolean checkQQ(String qq){
        // qq为null,长度小于6,长度大于20,都为false
        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;
            }
        }
        // 全为数字,返回true
        return true;
    }
}

匹配方法

字符串对象提供的匹配正则表达式的方法

方法 方法描述
public boolean matches(String regex) 判断是否匹配正则表达式,匹配返回true,不匹配返回

正则表达式书写

字符类(默认匹配一个字符)

表达式 描述
[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&&[def]] d, e, 或f(交集)
[a-lq-z] a到z,除了m到p
[ad-z] a到z,除了b和c:[a-b&& [^bc]]

预定义类(默认匹配一个字符)

表达式 描述
. (点)任何字符
\d 一个数字,[0-9]
\D 非数字: [^0-9]
\s 一个空白字符: [ \t\n\x0B\f\r]
\S 非空白字符: [^\s]
\w [a-zA-Z_0-9] 英文、数字、下划线
\W [^\w] 一个非单词字符

贪婪的量词(配合匹配多个字符)

表达式 描述
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) {
        // 字符类 只能是 a b c
        System.out.println("a".matches("[abc]"));
        System.out.println("z".matches("[abc]"));
        // 字符类 不能是 a b c
        System.out.println("a".matches("[^abc]"));
        System.out.println("bz".matches("[^abc]"));
        // 预定义类
        System.out.println("a".matches("\\d"));//一个数字
        System.out.println("1".matches("\\D"));// 一个非数字
        // 贪婪的量词
        System.out.println("123".matches("\\d{3}"));// 三个数字
        System.out.println("ac".matches("\\s{2}"));// 两个空白字符
        // 校验密码 必须是数字、字母、下划线 至少6次
        System.out.println("fj32_".matches("\\w{6,}"));
        // 验证码 必须是数字和字符,必须4位
        System.out.println("je33".matches("[\\w&&[^_]]{4}"));
    }
}

案列-验证邮箱

public class RegexDemo03 {
    public static void main(String[] args) {
        // 对邮箱格式进行判断 1335353@qq.com 111112443@.com.cn
        System.out.println(checkEmail("1543@qqd.com.cn"));
        System.out.println(checkEmail("111112443@khg.com.cn"));
    }
    public static boolean checkEmail(String email){
        /*
            1到30位的数字、字母、下划线
            一位@字符
            2到20位的数字、字母、
            (一位. 2到20位数字、字母、)1到2次
         */
        if (email.matches("\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2}")) {
            return true;
        }else {
            return false;
        }
    }
}

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

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

代码实现

public class RegexDemo04 {
    public static void main(String[] args) {
        // 正则表达式分割
        String names = "小明232sfhsh大明232sj李雷";
        String[] name = names.split("\\w+");
        for (int i = 0; i < name.length; i++) {
            System.out.println(name[i]);
        }
        // 正则表达式 替换
        String namesNew = names.replaceAll("\\w+", ",");
        System.out.println(namesNew);
    }
}

正则表达式爬取信息

public class RegexDemo05 {
    public static void main(String[] args) {
        String string = "来黑马程序学习Java,电话020-43422424,或者联系邮箱" +
                "itcast@itcast.cn,电话18762832633,0203232323" +
                "邮箱bozai@itcast.cn,400-100-3233 ,4001003232";
        /*
         需求:从上面的内容中爬取出 电话号码和邮箱。
         */
        /*
            1.定义爬取规则
            邮箱: \w{1,30}@[a-zA-Z0-9]{2,20}(\.[a-zA-Z0-9]{2,20}){1,2}
            电话号码:
                [1][3-9]\d{9} 第一位以1开头 第二位3-9 剩下9位0到9
                0[2-6]0-?\d{5,20}
                400-?\d{3,9}-?\d{3,9}
         */
        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{5,20})|(400-?\\d{3,9}-?\\d{3,9})";
        // 2.将爬取规则编译成匹配对象
        Pattern pattern = Pattern.compile(regex);
        // 3.得到一个内容匹配对象
        Matcher matcher = pattern.matcher(string);
        // 4.开始找匹配的内容
        while (matcher.find()) {
            String group = matcher.group();
            System.out.println(group);
        }
    }
}

网站文章

  • 【Python】多线程

    import threadingimport time class myThread (threading.Thread): #继承父类threading.Thread def __init__(self, threadID, name): threading.Thread.__init__(self) self.name = na...

    2024-04-01 03:15:23
  • eureka使用总结

    eureka使用总结

    目录Eureka常用配置Eureka 单节点搭建eureka多节点服务注册的配置选项Eureka单独使用Rest服务调用/eureka/status 服务状态注册到eureka的服务信息查看注册到eu...

    2024-04-01 03:15:15
  • NFT细分赛道分类及代表项目汇总

    NFT细分赛道分类及代表项目汇总

    NFT是Non-Fungible Token的缩写,中文称为「非同质化代币」,通常是指开发者在以太坊平台上根据ERC721标准/协议所发行的代币,它的特性为不可分割、不可替代、独一无二的,简单来说,采...

    2024-04-01 03:14:36
  • JSP JAVA javaweb仓库库存管理系统(仓库进销存管理系统库存管理系统仓库管理系统)

    JSP JAVA javaweb仓库库存管理系统(仓库进销存管理系统库存管理系统仓库管理系统)

    JSP仓库库存管理系统(仓库进销存管理系统库存管理系统仓库管理系统)

    2024-04-01 03:14:29
  • HDFS详解

    HDFS详解

    ******HDFS基本概念篇******1. HDFS前言设计思想分而治之:将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;在大数据系统中作用:为各类...

    2024-04-01 03:14:22
  • linux虚拟机访问windows宿主机的共享文件

    先在Windows下建个共享文件夹,暂时取名叫share (VM-&gt;setting-&gt;options-&gt;shared folders)再进入虚拟机的下拉菜单VM-&gt;Instal...

    2024-04-01 03:14:15
  • CCIE重认证350-401

    traffic policing: causes TCP retransmissions when traffic is dropped导致TCP重传时流量下降 introduces no delay...

    2024-04-01 03:13:30
  • Windows驱动程序的加载

    NT式驱动程序的加载 1. 用DriverMonitor工具加载NT式驱动 2. 在注册表中填写相应的字段,Windows对NT式驱动程序的加载,是基于服务的方式加载的,类似于Windows服务程序的加载。设备驱动程序的动态加载主要是基于服务控制程序(Service Control Manager,SCM)系统组件完成的。 SCM组件为Windows中运行的组件提供许多服务,例如,启动,停止

    2024-04-01 03:13:23
  • Apache Maven 入门篇(下)

    Apache Maven 入门篇(下)

    Apache Maven 入门篇(下) 作者:George Ma第一篇文章大概的介绍了一下Apache Maven以及它的下载和安装,并且运行了一个简单的示例。那么在对maven有了一点接触后,接下去的一步是要了解maven的核心概念,这样才能在使用maven的时候游刃有余。接下来我们介绍下面这几个核心概念:POM (Project Object Model)Maven 插

    2024-04-01 03:12:34
  • qmake: could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake‘: No such file or directory

    qmake: could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake‘: No such file or directory

    【代码】qmake: could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake‘: No such file or directory。

    2024-04-01 03:12:26