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

正则表达式

正则表达式(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]"));//trueSystem.out.println("ab".matches("[abc]"));//falseSystem.out.println("z".matches("[abc]"));//falseSystem.out.println("ab".matches("[abc][abc]"));//true//表示只能出现一次System.out.println("a".matches("[^abc]"));//falseSystem.out.println("f".matches("[^abc]"));//trueSystem.out.println("zz".matches("[^abc]"));//falseSystem.out.println("zz".matches("[^abc][^abc]"));//true//表示是否不出现System.out.println("a".matches("[a-z]"));//trueSystem.out.println("A".matches("[a-zA-Z]"));//trueSystem.out.println("aa".matches("[a-z]"));//falseSystem.out.println("aa".matches("[a-z][a-z]"));//trueSystem.out.println("0".matches("[a-zA-Z]"));//falseSystem.out.println("0".matches("[a-zA-Z0-9]"));//trueSystem.out.println("0".matches("[0-9]"));//true//范围的判断 a-z和A-ZSystem.out.println("a".matches("[a-d[m-p]]"));//trueSystem.out.println("0".matches("[a-d[m-p]]"));//false//范围的判断 a-z或者A-ZSystem.out.println("a".matches("[a-z&&[def]]"));//falseSystem.out.println("a".matches("[a-z&[def]]"));//trueSystem.out.println("&".matches("[a-z&&[def]]"));//falseSystem.out.println("1".matches("[a-z&&[def]]"));//false//范围的判断 求交集a-z和def的 是否全都有//如果写成&就是一个简简单单的且符号System.out.println("a".matches("[a-z&&[^bc]]"));//trueSystem.out.println("a".matches("[a-z&&[^b-c]]"));//true//范围的判断 a-z和非bc的交集}

预定义字符类

\在java中是转义字符

改变后面字符的原本含义

通过路径访问时

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

  System.out.println("\"");System.out.println("你".matches(".."));//falseSystem.out.println("你A".matches(".."));//true//判断是否为一个字符System.out.println("1".matches("\\d"));//trueSystem.out.println("11".matches("\\d"));//falseSystem.out.println("11".matches("\\d\\d"));//true//判断是否为一个数字System.out.println("z".matches("\\w"));//trueSystem.out.println("z".matches("\\w"));//trueSystem.out.println("2".matches("\\w"));//trueSystem.out.println("21".matches("\\w"));//falseSystem.out.println("你".matches("\\w"));//falseSystem.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}"));//trueSystem.out.println("23_f".matches("[a-zA-Z0-9]{4}"));//falseSystem.out.println("23_f".matches("[\\w&&[^_]]{4}"));//falseSystem.out.println("23df".matches("[\\w&&[^_]]{4}"));//true

所有的测试用例

public class Main {public static void main(String[] args) {//正则表达式练习System.out.println("a".matches("[abc]"));//trueSystem.out.println("ab".matches("[abc]"));//falseSystem.out.println("z".matches("[abc]"));//falseSystem.out.println("ab".matches("[abc][abc]"));//true//表示只能出现一次System.out.println("a".matches("[^abc]"));//falseSystem.out.println("f".matches("[^abc]"));//trueSystem.out.println("zz".matches("[^abc]"));//falseSystem.out.println("zz".matches("[^abc][^abc]"));//true//表示是否不出现System.out.println("a".matches("[a-z]"));//trueSystem.out.println("A".matches("[a-zA-Z]"));//trueSystem.out.println("aa".matches("[a-z]"));//falseSystem.out.println("aa".matches("[a-z][a-z]"));//trueSystem.out.println("0".matches("[a-zA-Z]"));//falseSystem.out.println("0".matches("[a-zA-Z0-9]"));//trueSystem.out.println("0".matches("[0-9]"));//true//范围的判断 a-z和A-ZSystem.out.println("a".matches("[a-d[m-p]]"));//trueSystem.out.println("0".matches("[a-d[m-p]]"));//false//范围的判断 a-z或者A-ZSystem.out.println("a".matches("[a-z&&[def]]"));//falseSystem.out.println("a".matches("[a-z&[def]]"));//trueSystem.out.println("&".matches("[a-z&&[def]]"));//falseSystem.out.println("1".matches("[a-z&&[def]]"));//false//范围的判断 求交集a-z和def的 是否全都有//如果写成&就是一个简简单单的且符号System.out.println("a".matches("[a-z&&[^bc]]"));//trueSystem.out.println("a".matches("[a-z&&[^b-c]]"));//true//范围的判断 a-z和非bc的交集System.out.println("\"");System.out.println("你".matches(".."));//falseSystem.out.println("你A".matches(".."));//true//判断是否为一个字符System.out.println("1".matches("\\d"));//trueSystem.out.println("11".matches("\\d"));//falseSystem.out.println("11".matches("\\d\\d"));//true//判断是否为一个数字System.out.println("z".matches("\\w"));//trueSystem.out.println("z".matches("\\w"));//trueSystem.out.println("2".matches("\\w"));//trueSystem.out.println("21".matches("\\w"));//falseSystem.out.println("你".matches("\\w"));//falseSystem.out.println("_".matches("\\w"));//trueSystem.out.println("你".matches("\\W"));//false// \\w只能是一位单词字符 [a-zA-Z_0-9] 大写的W是取反//小写 大写 下划线 数字System.out.println("23df".matches("[a-zA-Z0-9]{4}"));//trueSystem.out.println("23_f".matches("[a-zA-Z0-9]{4}"));//falseSystem.out.println("23_f".matches("[\\w&&[^_]]{4}"));//falseSystem.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.mzph.cn/diannao/30750.shtml

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

相关文章

[问题记录]Qt QGraphicsItem 移动时出现残影

目录 1.问题现象 2.问题原因 3.修改方案 1.问题现象 自定义 QGraphicsItem 时,绘制rect,对象移动时出现残影。 2.问题原因 直接原因是view未刷新的问题,所以网上有人使用方案 setViewportUpdateMode(QGraphicsView::FullViewportUpdate…

Linux下更新curl版本

一、前景 由于低版本的curl存在一定的漏洞,会对我们的服务器安全造成问题,所以,我们需要将curl由低版本安装到高版本。 二、步骤 1、首先检测服务器安装的curl版本 curl --version 2、查看服务器安装的curl的安装包 rpm -qa curl 3、卸载旧…

LabVIEW电动汽车核心部件检测系统

LabVIEW开发的电动汽车核心部件检测系统,通过硬件接入板和数据采集卡实现信号采集和分析。系统具备智能诊断、模块化设计和用户友好的特点,能够快速、精确地定位故障,提高电动汽车的维护效率和可靠性,支持新能源汽车市场的快速发展…

大数据助力电商发展||电商API接口接入

伴随互联网尤其是移动互联网的高速发展,电子商务已经成为人们生活中不可或缺的一部分,人们的购物理念和消费模式正在发生颠覆性的转变。基于天然的数据优势,电子商务平台利用大数据计算技术不断实施数据的累积、分析和处理,消费者…

windows pyenv-win:pyenv 下载过慢

先到官网下载指定版本的 exe 文件 Python Releases for Windows | Python.org 根据自己电脑的 下载 32 或者 64 下载完成后将 exe 放入 install_cache 再到 powershell 中执行安装指令 pyenv install 3.12.4

备忘录文字颜色怎么改 备忘录改变字体颜色方法

在日常的工作和生活中,备忘录已经成为我不可或缺的好帮手。但是,面对满满当当的备忘录,有时候不同的任务和信息都混在一起,让人眼花缭乱。我常常想,如果能改变备忘录中的文字颜色,用以区分不同类别的事项&a…

高清无字幕搞笑视频素材去哪里找哪里下载的?

在制作搞笑视频时,优质的无字幕视频素材对于提升作品的趣味性和吸引力至关重要。今天,我将为大家介绍一系列高清视频素材网站,这些网站不仅资源丰富、质量上乘,还能助你一臂之力,迅速提升视频的创意和品质。首先要推荐…

龙迅LT9611UXC 2 PORT MIPIDSI/CSI转HDMI 2.1,支持音频IIS/SPDIF输入,支持标准4K60HZ输出

龙迅LT9611UXC描述: LT9611UXC是一个高性能的MIPI DSI/CSI到HDMI2.0转换器。MIPI DSI/CSI输入具有可配置的单端口或双端口,1高速时钟通道和1~4高速数据通道,最大2Gbps/通道,可支持高达16Gbps的总带宽。LT9611UXC支持突发模式DSI视…

第二证券股市资讯:股票中什么叫龙头?

龙头,也就是龙头股,指的是某一职业中有必定影响力和号召力的股票,龙头股的涨跌通常对其他同职业板块股票的涨跌有必定演示和引导作用,是一种风向标一般的存在。龙头股的技能面表现和成交量都会比同时刻的大盘和地块要强。 具体分…

北京健康检测小程序开发,爱自己,从体检开始

随着经济与科技的不断发展,人们也越来越重视自身的身体健康。面对市面上众多的体检机构与五花八门的体检产品,人们往往没有充足的时间进行筛选,好不容易选好了医院、但进行单项体检的价格较高,选择套餐,又包含了一些不…

谷歌Google广告开户是怎么收费的?

谷歌Google广告无疑是企业拓展全球视野、精准触达目标客户的强大引擎。而作为这一旅程的启航站,开户流程的便捷性与成本效益成为了众多企业关注的焦点。云衔科技,作为数字化营销解决方案与SaaS软件服务的领军者,正以其专业、高效的服务体系&a…

【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别

目录 写在开头 一、CNN的原理 1. 概述 2. 卷积层 内参数(卷积核本身) 外参数(填充和步幅) 输入与输出的尺寸关系 3. 多通道问题 多通道输入 多通道输出 4. 池化层 平均汇聚 最大值汇聚 二、手写数字识别 1. 任务…

MySQL:SELECT list is not in GROUP BY clause 报错 解决方案

一、前言 一大早上测试环境,发现测试环境的MySQL报错了。 SELECT list is not in GROUP BY clause and contains nonaggregated column二、解决方案 官方文档中提到: 大致意思: 用于GROUP BY的SQL / 92标准要求满足以下条件: SE…

AI绘画ComfyUI-插件-面部修复,快速入门安装使用!

这期给大家分享一个插件AI绘画 ComfyUI的——Impact Pack ComfyUI也是隶属于Stable Diffusion的工作流形式的AI绘画工具。 这是一个综合节点,这期先介绍下这个插件中的面部修复功能 Impact Pack插件 1、下载插件 在ComfyUI管理器中安装节点,搜索Imp…

昇思25天学习打卡营第2天 | 张量基础

内容介绍:张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。 具体内容: 1. 导包 import numpy as np import minds…

Android 14 权限等级剖析

Android 14 权限等级剖析 Android 14 引入了新的权限等级,为应用程序访问敏感信息和功能提供了更细粒度的控制。了解这些新的权限等级及其应用场景对于开发人员至关重要。 1. 概述 Android 一直以来都使用权限机制来控制应用程序对系统资源和用户数据的访问。随着…

[动态规划位运算]表达式的期望值

描述 给定如下表达式&#xff1a; A0O1A1O2A2O3A3… OnAn 其中Ai(0<i<n)代表操作数&#xff0c;Oi(1<i<n)代表算子。有三类算子包括‘&’、‘|’和‘^’&#xff0c;这些算子拥有相同的计算优先级。每个算子Oi以及它后面相邻的操作数Ai&#xff0c;他们可能一…

JDK8和JDK17共存以及切换

1. 下载和安装 1.1下载安装JDK17 下载地址: https://www.oracle.com/cn/java/technologies/downloads/ 1.2安装jdk17 点击下一步 此处可以修改安装的目标位置,修改安装位置后,点击下一步 接下来及安装完成 注意事项 此时通过cmd命令java –version你会发现竟然出现了…

四十八、openlayers地图调色总结——锐化、模糊、浮雕滤镜,调整地图色相、饱和度、亮度

这篇是对滤镜的总结&#xff0c;方便工作中直接使用。 想要调整图层的颜色&#xff0c;有两种方法。 方法一&#xff1a; 加载图层时使用tileLoadFunction函数拿到context添加canvas滤镜效果。 this.imagery new TileLayer({source: new XYZ({url: "https://server.arc…

MeshAnything:艺术家级别的自回归3D网格生成

MeshAnything: Artist-Created Mesh Generation with Autoregressive Transformers &#x1f4dc; 文献卡 MeshAnything: Artist-Created Mesh Generation with Autoregressive Transformers作者: Yiwen Chen; Tong He; Di Huang; Weicai Ye; Sijin Chen; Jiaxiang Tang; Xin…