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、卸载旧…

【HarmonyOS NEXT】鸿蒙App开发抓包指导-以Charles工具为例

本文档针对鸿蒙单框架设备开发调测时的抓包方案进行整体介绍(与鸿蒙设备强相关的步骤会做详细陈述),以Charles抓包工具为例,具体抓包步骤如下: 手机镜像要求:2.0.0.66(SP60DEVC00E66R4P1)及以上 大家容易忽…

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

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

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

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

android room 多表查询

用一个data class来接收多表查的结果 Epc.kt 表1 Entity(tableName "epc",indices [Index(value ["epcId"], unique true)] ) data class Epc(/*** ID*/PrimaryKey(autoGenerate true)val _id: Int 0,/*** 企业编码*/ColumnInfo(name "compa…

windows pyenv-win:pyenv 下载过慢

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

八、C#运算符

C#运算符 晕杜甫是一种告诉编辑器执行特定的数学或逻辑操作的符号。C#有丰富的内置运算符,分类如下: 算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符 算术运算符 下表显示了 C# 支持的所有算术运算符。假设变量 A 的值为 10&#xff0c…

带你学习Mybatis之拦截器

mybatis拦截器 mybatis拦截器也叫做插件,mybatis允许开发者自定义拦截器对SQL语句执行过程中的某一个点进行拦截。默认mybatis允许拦截Mybatis中的四大核心对象:Executor中的方法、ParameterHandler的方法、ResultSetHandler的方法以及StatementHandler中的方法 Exe…

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

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

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

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

网络技术 - 服务端响应头信息 Transfer-Encoding

Transfer-Encoding: chunked 是 HTTP/1.1 协议中定义的一种数据传输方式,它允许 HTTP 响应数据分成多个部分(即“块”)发送给客户端。以下是关于 Transfer-Encoding: chunked 的详细解释: 作用和目的 动态内容传输:对于动态生成的内容,服务器无法提前知道整个响应数据的…

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

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

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

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

圈复杂度是什么?go语言调整圈复杂度举例

圈复杂度(也称为循环复杂度或McCabe复杂度)是衡量程序复杂性的一个指标,它通常与代码中的控制流结构(如条件语句、循环和函数调用)的数量相关。在Go语言中,你可以通过重构代码来降低圈复杂度,从…

Arcpy Python拆分shp数据要素为多个shp

我有一个各县shp文件,我想要拆分成不同的要素,命名根据NAME字段进行命名,字段值是字符串,以下为基于arcpy的python实现代码。(python2.7) import arcpy import os# 设置工作空间和输入的 shapefile 文件路…

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

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

main() 函数执行前,具体会初始化和创建哪些全局变量 ?

背景描述:使用 Objective-C 开发 iOS 或者 MacOS 应用 具体会初始化和创建哪些全局变量 ? 在 iOS 应用程序的启动过程中,初始化和创建全局变量的步骤确实包含了多种类型的全局变量。具体来说,包含以下几种类型: C 全局…