JavaSE 面向对象程序设计 正则表达式

news2025/2/26 4:36:13

正则表达式

正则表达式(Regular Expression,简称Regex)是用于匹配文本中模式的字符串表达式。它由普通字符(例如字母、数字)和特殊字符(称为元字符)组成,可以非常灵活地定义搜索模式。

常见的一些正则表达式元字符包括:

  • .:匹配任意单个字符,除了换行符 \n
  • *:匹配前面的字符零次或多次。
  • +:匹配前面的字符一次或多次。
  • ?:匹配前面的字符零次或一次。
  • ^:匹配字符串的开始。
  • $:匹配字符串的结束。
  • \d:匹配任意一个数字字符,等价于 [0-9]
  • \w:匹配任意一个字母、数字或下划线字符,等价于 [a-zA-Z0-9_]
  • \s:匹配任意一个空白字符,包括空格、制表符、换行符等。
  • [...]:字符集,匹配方括号中的任意一个字符。
  • [^...]:否定字符集,匹配除了方括号中字符的任意一个字符。

例如,正则表达式 \d{3}-\d{3}-\d{4} 可以匹配形如 123-456-7890 的电话号码格式,其中 \d{3} 表示匹配三个数字字符,- 是普通字符。

正则表达式在文本处理、搜索替换、输入验证等场景中非常有用,能够提供高效的模式匹配和文本处理功能。

正则表达式可以校验一个字符串是否格式合法

以前我们的核心思想是

把异常数据拿出考虑 过滤

将留下满足的数据通过

从左往右依次书写

[1-9]表示0不能防止开头

\ \d表示都是数字

{5,19}表示后面有5—19位

作用

校验字符串是否满足规则

在一段文本中查找一段内容

字符类

public class Main {
    public static void main(String[] args) {

        //正则表达式练习
        System.out.println("a".matches("[abc]"));//true
        System.out.println("ab".matches("[abc]"));//false
        System.out.println("z".matches("[abc]"));//false
        System.out.println("ab".matches("[abc][abc]"));//true
        //表示只能出现一次

        System.out.println("a".matches("[^abc]"));//false
        System.out.println("f".matches("[^abc]"));//true
        System.out.println("zz".matches("[^abc]"));//false
        System.out.println("zz".matches("[^abc][^abc]"));//true
        //表示是否不出现

        System.out.println("a".matches("[a-z]"));//true
        System.out.println("A".matches("[a-zA-Z]"));//true
        System.out.println("aa".matches("[a-z]"));//false
        System.out.println("aa".matches("[a-z][a-z]"));//true
        System.out.println("0".matches("[a-zA-Z]"));//false
        System.out.println("0".matches("[a-zA-Z0-9]"));//true
        System.out.println("0".matches("[0-9]"));//true
        //范围的判断 a-z和A-Z

        System.out.println("a".matches("[a-d[m-p]]"));//true
        System.out.println("0".matches("[a-d[m-p]]"));//false
        //范围的判断 a-z或者A-Z

        System.out.println("a".matches("[a-z&&[def]]"));//false
        System.out.println("a".matches("[a-z&[def]]"));//true
        System.out.println("&".matches("[a-z&&[def]]"));//false
        System.out.println("1".matches("[a-z&&[def]]"));//false
        //范围的判断 求交集a-z和def的 是否全都有
        //如果写成&就是一个简简单单的且符号

        System.out.println("a".matches("[a-z&&[^bc]]"));//true
        System.out.println("a".matches("[a-z&&[^b-c]]"));//true
        //范围的判断 a-z和非bc的交集
    }

预定义字符类

\在java中是转义字符

改变后面字符的原本含义

通过路径访问时

\ \前面的\表示将后面的\转化成一个普通的\

  System.out.println("\"");

        System.out.println("你".matches(".."));//false
        System.out.println("你A".matches(".."));//true
        //判断是否为一个字符

        System.out.println("1".matches("\\d"));//true
        System.out.println("11".matches("\\d"));//false
        System.out.println("11".matches("\\d\\d"));//true
        //判断是否为一个数字

        System.out.println("z".matches("\\w"));//true
        System.out.println("z".matches("\\w"));//true
        System.out.println("2".matches("\\w"));//true
        System.out.println("21".matches("\\w"));//false
        System.out.println("你".matches("\\w"));//false
        System.out.println("_".matches("\\w"));//true
        // \\w只能是一位单词字符 [a-zA-Z_0-9] 大写的W是取反
        //小写 大写 下划线 数字
        System.out.println("你".matches("\\W"));//false

数量词

正则表达式构造在Pattern类里面

打开API帮助文档查看

        System.out.println("23df".matches("[a-zA-Z0-9]{4}"));//true
        System.out.println("23_f".matches("[a-zA-Z0-9]{4}"));//false
        System.out.println("23_f".matches("[\\w&&[^_]]{4}"));//false
        System.out.println("23df".matches("[\\w&&[^_]]{4}"));//true

所有的测试用例

public class Main {
    public static void main(String[] args) {

        //正则表达式练习
        System.out.println("a".matches("[abc]"));//true
        System.out.println("ab".matches("[abc]"));//false
        System.out.println("z".matches("[abc]"));//false
        System.out.println("ab".matches("[abc][abc]"));//true
        //表示只能出现一次

        System.out.println("a".matches("[^abc]"));//false
        System.out.println("f".matches("[^abc]"));//true
        System.out.println("zz".matches("[^abc]"));//false
        System.out.println("zz".matches("[^abc][^abc]"));//true
        //表示是否不出现

        System.out.println("a".matches("[a-z]"));//true
        System.out.println("A".matches("[a-zA-Z]"));//true
        System.out.println("aa".matches("[a-z]"));//false
        System.out.println("aa".matches("[a-z][a-z]"));//true
        System.out.println("0".matches("[a-zA-Z]"));//false
        System.out.println("0".matches("[a-zA-Z0-9]"));//true
        System.out.println("0".matches("[0-9]"));//true
        //范围的判断 a-z和A-Z

        System.out.println("a".matches("[a-d[m-p]]"));//true
        System.out.println("0".matches("[a-d[m-p]]"));//false
        //范围的判断 a-z或者A-Z

        System.out.println("a".matches("[a-z&&[def]]"));//false
        System.out.println("a".matches("[a-z&[def]]"));//true
        System.out.println("&".matches("[a-z&&[def]]"));//false
        System.out.println("1".matches("[a-z&&[def]]"));//false
        //范围的判断 求交集a-z和def的 是否全都有
        //如果写成&就是一个简简单单的且符号

        System.out.println("a".matches("[a-z&&[^bc]]"));//true
        System.out.println("a".matches("[a-z&&[^b-c]]"));//true
        //范围的判断 a-z和非bc的交集

        System.out.println("\"");

        System.out.println("你".matches(".."));//false
        System.out.println("你A".matches(".."));//true
        //判断是否为一个字符

        System.out.println("1".matches("\\d"));//true
        System.out.println("11".matches("\\d"));//false
        System.out.println("11".matches("\\d\\d"));//true
        //判断是否为一个数字

        System.out.println("z".matches("\\w"));//true
        System.out.println("z".matches("\\w"));//true
        System.out.println("2".matches("\\w"));//true
        System.out.println("21".matches("\\w"));//false
        System.out.println("你".matches("\\w"));//false
        System.out.println("_".matches("\\w"));//true
        System.out.println("你".matches("\\W"));//false
        // \\w只能是一位单词字符 [a-zA-Z_0-9] 大写的W是取反
        //小写 大写 下划线 数字

        System.out.println("23df".matches("[a-zA-Z0-9]{4}"));//true
        System.out.println("23_f".matches("[a-zA-Z0-9]{4}"));//false
        System.out.println("23_f".matches("[\\w&&[^_]]{4}"));//false
        System.out.println("23df".matches("[\\w&&[^_]]{4}"));//true
    }
}

正则表达式练习

正则表达式书写时应该拿正确的数据从左往右依次书写

校验输入的手机号码

校验输入的邮箱号

校验输入的电话号码

是否符合要求


public class Main {
    public static void main(String[] args) {
        //心得
        //拿一个正确的数据。从左往右依次去写
        //手机号码 13112345678
        //分成三部分
        //  1表示手机号码只能是1开头,
        //  [3-9]表示手号码第二位只能是3-9之间的
        //  \\d{9}表示任意数字可以出现9次
        String regex1="1[3-9]\\d{9}";

        //座机号码 020-2324242
        //分为三部分
        //  0\\d{2,3}表示一定以0开头 从第二位开始可以是任意数字出现2-3次
        //  ?表示次数,出现1次或者0次
        //  号码的第一位不能以0开头,从第二位开始可以是任意数字,一共5-10位
        String regex2="0\\d{2,3}-?[1-9]\\d{4,9}";
        System.out.println("021224422".matches(regex2));

        //邮箱号码 323232@qq.com zhangsan@qq.com dlei009@pei.com.cn
        //分成三部分
        //  @的左边 \\w+ 表示出现任意字母大小写数字 至少出现一次
        //  @表示必须出现一次
        //  分成三小段
        //  [\w^_]表示任意大小写字母数字去掉下划线{2,6}由2-6次
        //  \\.表示必须出现一个点 .表示出现任意一个字符
        //  [a-zA-Z]{2,3}表示出现2到3位的任意大小写字母
        //  括号括起来表示那一部分可以出现一次到两次 看成一组
        String regex3="\\w+@\\[\\w^_]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
    }
}

在实际开发中,我们很少会自己写正则表达式

百度一个类似的,自己改成公司要求

要求能看的懂即可

| 表示或者的意思

0和1加上任意一个整数 或者 2加上0或1或2

0-5加上任意一个数字

0-5加上任意一个数字

身份证校验

^(\d{17}[0-9Xx])$

方括号里表示三种方式只要出现一次就可以了

(?i)表示忽略后方字符串的大小写

身份证校验

前六位是省份 市区 派出所信息

第一位不能是0 [1-9]\ \d{5}

然后是出生日期

年份 {18|19|20} \ \d{2}

月份 01-09 10 11 12 0[1-9]|[0-2]

日期01-31 0[1-9] | [12]\ \d |3[01]

后面四位 先任意出现3次数字 \ \d{3}

最后一位可以是一位数字或xX [\ \dXx]**

最后拼起来一起 用括号

String sfz="/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0[1-9]|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/";

鼠标右键 用插件搜索 然后插入

我们需要对现有的需求进行一些改写

小结


public class Main {
    public static void main(String[] args) {
        //心得
        //拿一个正确的数据。从左往右依次去写
        //手机号码 13112345678
        //分成三部分
        //  1表示手机号码只能是1开头,
        //  [3-9]表示手号码第二位只能是3-9之间的
        //  \\d{9}表示任意数字可以出现9次
        String regex1="1[3-9]\\d{9}";

        //座机号码 020-2324242
        //分为三部分
        //  0\\d{2,3}表示一定以0开头 从第二位开始可以是任意数字出现2-3次
        //  ?表示次数,出现1次或者0次
        //  号码的第一位不能以0开头,从第二位开始可以是任意数字,一共5-10位
        String regex2="0\\d{2,3}-?[1-9]\\d{4,9}";
        System.out.println("021224422".matches(regex2));

        //邮箱号码 323232@qq.com zhangsan@qq.com dlei009@pei.com.cn
        //分成三部分
        //  @的左边 \\w+ 表示出现任意字母大小写数字 至少出现一次
        //  @表示必须出现一次
        //  分成三小段
        //  [\w^_]表示任意大小写字母数字去掉下划线{2,6}由2-6次
        //  \\.表示必须出现一个点 .表示出现任意一个字符
        //  [a-zA-Z]{2,3}表示出现2到3位的任意大小写字母
        //  括号括起来表示那一部分可以出现一次到两次 看成一组
        String regex3="\\w+@\\[\\w^_]{2,6}(\\.[a-zA-Z]{2,3}){1,2}"; 2]\\d|30|31)\\d{3}$)|(^\\d{6}(18|19|20)\\d{2}(0[1-9]|10|11|12)([0-2]\\d|30|31)\\d{3}(\\d|X|x)$)/";
    }

}

个人号推广

博客主页

多多!-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

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

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

相关文章

【计算机网络仿真实验-实验3.1、3.2】交换路由综合实验

实验3.1 交换路由综合实验——作业1 一、实验目的 运用实验二(可前往博主首页计算机网络专栏下查看)中学到的知识,将这个图中的PC机连接起来组网并分析,本篇涉及代码以截图展示,过于简单的代码及操作不再详细介绍&…

数据分析第三讲:numpy的应用入门(二)

NumPy的应用(二) 数组对象的方法 获取描述统计信息 描述统计信息主要包括数据的集中趋势、离散程度和频数分析等,其中集中趋势主要看均值和中位数,离散程度可以看极值、方差、标准差等,详细的内容大家可以阅读《统计…

使用事件日志识别常见 Windows 错误

事件查看器,一个标准的诊断工具,嵌入在Windows操作系统,记录了所有的系统事件,该日志捕获有关硬件问题、软件中断和整体系统行为的详细信息。通过分析这些日志,管理员可以查明系统错误和运行时错误的根本原因。了解如何…

如何成为沟通高手,读懂人心的心理学

一、教程描述 人际关系和沟通能力是闯荡社会的重要资本,懂心理让你看透他人的心思,读懂人心让人占尽优势,有效沟通让你提高效率,知己知彼,谋定而后动,充分了解他人的心理是一个人立足于职场和社交场的基础…

SYD881X读取GATT VALUE的长度

SYD881X读取GATT VALUE的长度 现在具体遇到这样一个需要,机器生产后要更新profile,这个只能够通过升级4K来做,但是需要知道profile是否改变了,这个就要知道profile是否改变来决定是否要升级,这里的做法是增加一个函数&…

可以免费领取tokens的大模型服务

本文更新时间:2024年6月20日 豆包大模型 “亲爱的客户,模型提供方将在5月15日至8月30日期间,为您提供一次独特的机会,即高达5亿tokens的免费权益。这是我们对您长期支持的感谢,也是对未来合作的期待。” 在8月30日之…

手机网站制作软件是哪些

手机网站制作软件是一种用于设计、开发和创建适用于移动设备的网站的软件工具。随着移动互联网时代的到来,越来越多的用户开始使用手机浏览网页和进行在线交流,因此,手机网站制作软件也逐渐成为了市场上的热门工具。 1. Adobe Dreamweaver&am…

计算机组成原理(Wrong Question)

目录 一、计算机系统概述 *1.1 计算机发展历程 1.2 计算机系统层次结构 1.3 计算机的性能指标 二、 数据的表示和运算 2.1 数制和编码 2.2 运算方法和运算电路 2.3 浮点数的表示与运算 三、存储系统 3.1 存储器概述 3.2 主存储器 3.3 主存储器与CPU的连接 3.4 外部…

Springboot集成Mybatisplus过程

这里写目录标题 背景步骤明确标准实操过程创建好数据库,命名好(这里会考察一个命名规范),表的命名,中间使用下划线隔离开。使用idea创建Springboot项目(注意版本问题)使用插件生成代码常用代码p…

下载mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar操作教程

1、下载地址:MySQL :: Download MySQL Community Server (Archived Versions) 2、截图如下

Nvidia Isaac Sim 入门教程 2024(3)图形界面

Isaac Sim 基本使用 版权信息 Copyright 2023-2024 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. The author …

产品经理方法论

1、用户体验 5 要素 1,表现层是你拿到一个产品以后,视觉表现,配色,布局,排版等等 2,框架层,是交互层面的东西,比如,操作情况,刷新,页面跳转&…

android 在线程中更新界面

在Android中,你不能直接从子线程中更新UI,因为这会导致应用崩溃。你需要使用Handler或runOnUiThread()来更新UI。 使用Handler 以下是如何使用Handler在子线程中更新UI的示例: 1. 创建Handler实例: import android.os.Bundle;…

肩背筋膜炎怎么治疗最有效

肩背筋膜炎是一种常见的肌肉骨骼疾病,其症状主要包括:肩背区域疼痛:由于筋膜组织受到损伤,肩背部位会出现明显的疼痛,疼痛可能会放射到周围的其他部位,严重时会影响睡眠和休息。肌肉紧张和僵硬:…

数据库实战(二)(引言+关系代数)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀数据库 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 常见概念 一、什么是数据库&#xf…

AJAX 原理-day3

XMLHttpRequest AJAX原理 是 XMLHttpRequest对象 定义: 关系:axios 内部采用 XMLHttpRequest 对象与服务器交互 步骤: 1. 创建 XMLHttpRequest 对象 2. 配置 请求方法 和请求 url 地址 3. 监听 loadend 事件,接收 …

AI绘画Stable Diffusion神级插件AnimateDiff超稳动画教程来了!手把手教你一次性学会

大家好,我是设计师阿威 今天给大家分享AI做稳定动画的新教程,这一次的稳定效果,比上一次和上上次都更加惊艳,而且实现难度直线下降!几乎可以说是有手就会,非常适合追求高效高质效果的商用场景!…

(7)摄像机和云台

文章目录 前言 1 云台 2 带有MAVLink接口的摄像机 3 相机控制和地理标签 4 视频质量差的常见修复方法 5 详细主题 前言 Copter、Plane 和 Rover 最多支持 3 轴云台,包括自动瞄准感兴趣区域(ROI)的相机和自动触发相机快门等先进功能。按…

【OS基础】符合AUTOSAR标准的RTAOS-Alarms详解

目录 前言 正文 7.报警Alarms 7.1配置Alarms 7.1.1激活一个任务 7.1.2 设置一个事件 7.1.3报警回调Alarm Callback 7.1.4 增加计数器值 7.2设置Alarms 7.2.1 绝对Alarms 7.2.2 相对Alarm 7.3自启动Alarms 7.4 删除Alarms 7.5确认何时会发生Alarm 7.6非周期Alarm…

Appium:Appium-Python-Client与Selenium版本不兼容导致的问题

一、问题描述 在执行python代码过程中&#xff0c;出现了以下错误&#xff1a; 错误一&#xff1a;No module named appium.webdriver.common.touch_action Traceback (most recent call last):File "d:\xxx\index.py", line 3, in <module> ModuleNotFound…