Java正则表达式

news2024/11/18 17:40:52

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为远程群辉NAS配置固定二级子域名【内网穿透】

由于使用免费的cpolar内网穿透&#xff0c;所生成的公网地址为随机临时的公网地址&#xff0c;24小时内会发生变化。对于需要长期访问的用户来讲&#xff0c;我们可以为其配置固定的二级子域名&#xff0c;同时提高带宽&#xff0c;实现更为高效流畅的访问。 配置固定的二级子…

β-1,3-D-葡聚糖修饰仿生中空二氧化硅复合粒子|葡聚糖修饰BiO2-x纳米片

β-1,3-D-葡聚糖修饰仿生中空二氧化硅复合粒子|葡聚糖修饰BiO2-x纳米片 中文名称&#xff1a;β-1,3-D-葡聚糖修饰仿生中空二氧化硅复合粒子 产品描述&#xff1a;仿生中空二氧化硅粒子和β1,3D葡聚糖经过偶联反应后得到;其中,仿生中空二氧化硅粒子的纳米传输孔道的孔径范…

AT8637S(PHS/EN输入接口单通道0.8A低压H桥IC)

描述 AT8637S为摄像机、消费类产品、玩具和其它低电压或者电池供电的运动控制类应用提供了一个集成的电机驱动器解决方案。AT8637/AT8637S能够驱动一个直流电机或其他诸如螺线管的器件。输出驱动模块由N MOS功率管构成的H桥组成&#xff0c;以驱动电机绕组。AT8637/AT8637S 能够…

[附源码]Python计算机毕业设计SSM基于响应式交友网站(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

大数据开发要学Java框架吗?

大数据开发要学Java框架吗&#xff1f;学习大数据要去学习Java而且还要精通&#xff0c;不仅要掌握Java基础知识还要掌握一些核心的Java架构。从java基础开始,学习大数据开发过程中必备的离线数据分析、实时数据分析和内存数据计算等&#xff0c;掌握大数据体系中几乎所有的核心…

(八)Vue之计算属性

文章目录插值语法实现methods实现计算属性实现计算属性简写Vue学习目录 上一篇&#xff1a;&#xff08;七&#xff09;Vue之事件处理 先看一个需求&#xff1a;提供两个输入框&#xff0c;一个输入姓&#xff0c;一个输入名&#xff0c;在下面展示全名。 插值语法实现 页…

vue3中的四种插槽的介绍-保证让你看看的明明白白!

插槽 当组件中只有一个插槽的时候&#xff0c;我们可以不设置 slot 的 name 属性。 v-slot 后可以不带参数&#xff0c;但是 v-slot 在没有设置 name 属性的时候&#xff0c; 插槽口会默认为“default”。 插槽主要是在封装组件的时候去使用 注意点&#xff1a;v-slot 只能添加…

【操作系统】操作系统硬件组成和进程

硬件组成体系结构 1.为什么要学操作系统 从操作系统-网络-应用程序-存储等多方面诊断和优化。比如&#xff1a;接口突然响应慢、服务器内存、CPU占用率高、Redis、MySQL查询慢&#xff0c;怎末排查问题。 2.性能优化诊断方法论 &#xff08;1&#xff09;围绕两个点&#x…

第12章 初识消息队列(MessageQueuing)

1 Redis分布式缓存数据库结合“StackExchange.Redis”中间件实现消息队列(MessageQueuing) Redis分布式缓存数据库消息队列(MessageQueuing)队列的实现模式有&#xff1a; 1、【生产(Producter)】--【消费(Worker)】模式。 变种模式&#xff1a;【基于异步消息队列List lpush-b…

Zabbix部署agent2

客户端提前部署好 下载rpm环境 http://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-agent2-5.0.2-1.el7.x86_64.rpm安装 [rootvpn_server opt]# yum localinstall zabbix-agent2-5.0.2-1.el7.x86_64.rpm -y# 修改配置⽂件&#xff0c;启动zabbix-agent2# 在zabbix-serve…

代码随想录第二天

专题&#xff1a;数组 题目&#xff1a;有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 2&#xff1a; 输入&#xff1a;nums [-7,-3,2,3,11] 输出&#xff1a;[4,9,9,…

[附源码]JAVA毕业设计外卖点餐系统(系统+LW)

[附源码]JAVA毕业设计外卖点餐系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

有趣且重要的css知识合集(6)动态控制css伪元素【var()】

在vue里&#xff0c;js和css的属性可以随意控制&#xff0c;比如:class和:style&#xff0c;但是我们想要动态控制伪元素的属性该怎么做呢&#xff1f; 比如下图&#xff0c;右下角小圆圈就是通过伪元素定义上去的&#xff0c;那我们想要自由实现伪元素的显示和隐藏该怎么做呢…

如何使用 MySQL、Thymeleaf 和 Spring Boot 从数据库上传和下载多个文件

使用百里香叶的春季启动上传和下载示例。在本文中&#xff0c;我们将学习如何从数据库上传和下载文件。 上传和下载文件是任何应用程序的重要组成部分之一。众所周知&#xff0c;我们使用 Spring Boot 使开发过程变得简单。因此&#xff0c;在这里我们将创建一个示例来从数据库…

高通Ride开发包使用指南(1)

高通Ride开发包使用指南&#xff08;1&#xff09;1引言1.1目的1.2范围1.3术语2系统前提条件和设置2.1先决条件2.1.1硬件2.1.2 软件2.1.3其他所需软件&#xff1a;2.2布线和设置1引言 1.1目的 本文档面向高通公司Snapdragon Ride的用户™ 平台3.0&#xff08;Cetus&#xff0…

点击化学DBCO-PEG8-Benzylamine,二苯并环辛炔-PEG8-苄胺标记试剂

【中文名称】二苯并环辛炔-八聚乙二醇-苄胺 【英文名称】 DBCO-PEG8-Benzylamine 【CAS号】N/A 【分子式】C42H55N3O10 【分子量】761.91 【基团】DBCO基团 【纯度】95%(HPLC) 【规格标准】1g&#xff0c;5g&#xff0c;10g&#xff0c;包装灵活&#xff0c;可进行相应的封装。…

[附源码]JAVA毕业设计微留学学生管理系统(系统+LW)

[附源码]JAVA毕业设计微留学学生管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技…

【2022.12.08】备战春招Day3——每日一题 + 406. 根据身高重建队列

【每日一题】1812. 判断国际象棋棋盘中一个格子的颜色 题目描述 给你一个坐标 coordinates &#xff0c;它是一个字符串&#xff0c;表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。 如果所给格子的颜色是白色&#xff0c;请你返回 true&#xff0c;如果是黑色…

DataX 源码调试及打包

文章目录1、源码分析2、打包3、任务测试4、job配置详解Reader&#xff08;读插件&#xff09;Writer&#xff08;写插件&#xff09;通用配置前文回顾&#xff1a; 《DataX 及 DataX-Web 安装使用详解》 除了前文介绍的我们可以直接安装使用外&#xff0c;还可以下载源码打包&…

一文解决Kubernetes 的 API 流量查看器 - Kubeshark

一、Kubeshark 是什么&#xff1f; Kubeshark 由 2021 年 UP9 公司开源的 K8s API 流量查看器 Mizu 发展而来&#xff0c;试图成为一款 K8s 全过程流量监控工具。 Kubeshark 被叫做 kubernetes 的 API 流量查看器&#xff0c;它提供对进出 Kubernetes 集群内容器和 pod 的所有…