Java SE 学习笔记(十)—— 正则表达式

目录

  • 1 引言
  • 2 常用匹配规则
    • 2.1 字符类
    • 2.2 预定义的字符类
    • 2.3 贪婪的量词
  • 3 正则表达式匹配的 API
  • 4 正则表达式应用
    • 4.1 正则表达式常见应用案例
    • 4.2 正则表达式在字符串方法中的使用
    • 4.3 正则表达式爬取信息

1 引言


😍 正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。

在这里插入图片描述

2 常用匹配规则


2.1 字符类


默认匹配一个字符

[abc] :只能是a 、b、或者 c

[^abc]: 除了a 、b、 c 之外的任意字符

[a-zA-Z]: a 到 z A 到 Z(范围)

[a-d[m-p]] :a 到 d 或者 m 到 p(并集)

[a-z&&[def]]: d、e 或 f (交集)

[a-z&&[^bc]]: a 到 z,除了 b、c

[a-z&&[^m-p]] : a 到 z,除了 m 到 p

2.2 预定义的字符类


默认匹配一个字符

.:任意字符

\d:一个数字:[0-9]

\D:非数字:[^0-9]

\s:一个空白字符:[\t\n\x0B\f\r]

\S:非空白字符:[^\s]

\w:英文、数字、下划线: [a-zA-Z_0-9]

\W:非英文、数字、下划线: [^\w]

2.3 贪婪的量词


配合匹配多个字符

?:前面的字符出现 0 次或 1 次

*:前面的字符出现 0 次或 多 次

+:前面的字符出现 1 次或 多 次

{n}:前面的字符出现 n 次

{n,}:前面的字符至少出现 n 次

{n,m}:前面的字符至少出现 n 次,但不超过 m 次

3 正则表达式匹配的 API


字符串对象提供了匹配正则表达式规则的 API

public boolean matches(String regex)

判断指定字符串是否匹配正则表达式,匹配返回true、不匹配返回false

🙋举个栗子:

public class Demo {public static void main(String[] args) {// 只能出现a、b、cSystem.out.println("a".matches("[abc]")); // true// 默认只匹配一个字符System.out.println("ab".matches("[abc]")); // falseSystem.out.println("ab".matches("[abc]+")); // true// 不能出现a、b、cSystem.out.println("a".matches("[^abc]")); // falseSystem.out.println("z".matches("[^abc]")); // true// 匹配数字System.out.println("3".matches("\\d")); // trueSystem.out.println("a".matches("\\d")); // false// 匹配数字、字母、_System.out.println("_".matches("\\w")); // trueSystem.out.println("24".matches("\\w")); // falseSystem.out.println("我".matches("\\w")); // falseSystem.out.println("我".matches("\\W")); // trueSystem.out.println("-------------------------");// 校验密码:必须是数字、字母、下划线,至少6位System.out.println("2ugyftyf2".matches("\\w{6,}")); // true// 验证码,必须是数字、字符,必须是4位System.out.println("34jh".matches("[a-zA-Z0-9]{4}")); // trueSystem.out.println("34jh".matches("[\\w&&[^_]]{4}")); // true}
}

4 正则表达式应用

4.1 正则表达式常见应用案例


😎 需求

  • 请编写程序模拟用户输入手机号码、验证格式正确,并给出提示,直到格式输入正确为止。
  • 请编写程序模拟用户输入邮箱号码、验证格式正确,并给出提示,直到格式输入正确为止。
  • 请编写程序模拟用户输入电话号码、验证格式正确,并给出提示,直到格式输入正确为止。

😵 分析

  • 定义方法,接收用户输入的数据,使用正则表达式完成检验,并给出提示。

😇 示例代码:

import java.util.Scanner;public class Demo {public static void main(String[] args) {checkPhone();checkEmail();checkTel();}public static void checkPhone(){Scanner sc =new Scanner(System.in);while (true) {System.out.println("请您输入你的注册手机号码:");String phone = sc.next();if (phone.matches("1[3-9]\\d{9}")){System.out.println("手机号码格式正确,注册成功!");break;}else{System.out.println("手机号码格式有误!");}}}public static void checkEmail(){Scanner sc =new Scanner(System.in);while (true) {System.out.println("请您输入你的邮箱:");String phone = sc.next();// 123@qq.com// 23ggyfgy@163.com// 331122weiwei@pci.com.cn// 这里注意.的正则表达式if (phone.matches("\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]){1,2}")){System.out.println("邮箱格式正确,注册成功!");break;}else{System.out.println("邮箱格式有误!");}}}public static void checkTel(){Scanner sc =new Scanner(System.in);while (true) {System.out.println("请您输入你的电话号码:");String phone = sc.next();if (phone.matches("0\\d{2,6}-?\\d{5,20}")){System.out.println("电话号码格式正确,注册成功!");break;}else{System.out.println("电话号码格式有误!");}}}
}

4.2 正则表达式在字符串方法中的使用


在这里插入图片描述
🙋举个栗子:

public class Demo {public static void main(String[] args) {String names = "张三huuigh7566756李四vtftr65675王五tftyftyfty999赵六";String[] arrs = names.split("\\w+");for (int i = 0; i < arrs.length; i++) {System.out.println(arrs[i]);}/*/张三李四王五赵六*/String s = names.replaceAll("\\w+", "\\\\");System.out.println(s); // 张三\李四\王五\赵六String s1 = names.replaceAll("\\w+", "\t");System.out.println(s1); // 张三	李四	王五	赵六String s2 = names.replaceAll("\\w+", "\\t"); // 同直接替换成tSystem.out.println(s2); // 张三t李四t王五t赵六}
}

4.3 正则表达式爬取信息


正则表达式支持爬取指定的信息

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Demo {public static void main(String[] args) {String rs = "来学习Java,电话020-43422424,或者联系邮箱" +"ibeit@ibeit.cn,电话18762832533,0203232323" +"邮箱bozai@itcast.cn,400-150-3233 ,4001073232";// 需求:从上面的内容中爬取出 电话号码和邮箱// 1.定义爬取规则String regex = "(\\w{1,}@\\w{2,10}(\\.\\w{2,10}){1,2})|" +"(1[3-9]\\d{9})|(0\\d{2,5}-?\\d{5,15})|400-?\\d{3,8}-?\\d{3,8}";// 2.编译正则表达式成为一个匹配规则对象Pattern pattern = Pattern.compile(regex);// 3.通过匹配规则对象得到一个匹配数据内容的匹配器对象Matcher matcher = pattern.matcher(rs);// 4.通过匹配器去内容中爬取出信息while (matcher.find()) {System.out.println(matcher.group());}/*020-43422424ibeit@ibeit.cn187628325330203232323bozai@itcast.cn400-150-32334001073232* */}
}

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

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

相关文章

I2C连续读写实现

IIC系列文章: (1)I2C 接口控制器理论讲解 (2)I2C接口控制设计与实现 (3)I2C连续读写实现 文章目录 前言一、 i2c_bit_shift 模块分析二、 i2c_control 模块实现三、 i2c_control 模块仿真测试前言 上文的 i2c_bit_shift 模块说完了,我们发现实现一个字节的写操作还是可以实现…

【UniApp开发小程序】小程序首页(展示商品、商品搜索、商品分类搜索)【后端基于若依管理系统开发】

文章目录 界面效果界面实现工具js页面首页让文字只显示两行路由跳转传递对象将商品分为两列显示使用中划线划掉原价 后端商品controllerservicemappersql 界面效果 【说明】 界面中商品的图片来源于闲鱼&#xff0c;若侵权请联系删除关于商品分类页面的实现&#xff0c;请在我…

MySQL基础篇

一、MySQL基础 黑窗口命令操作: 连接MySQL服务器&#xff1a;mysql -u用户名 -p密码 [-h数据库服务器的IP地址 -P端口号] ​ -h 参数不加&#xff0c;默认连接的是本地 127.0.0.1 的MySQL服务器 -P 参数不加&#xff0c;默认连接的端口号是 3306 、 **上述指令&#xff0c;可…

建库、建表、修改表、复制表、字符类型、数值类型、枚举类型、日期时间类型、检索目录、数据导入命令、数据导入步骤、数据导出命令、非空、默认值、唯一索

Top NSD DBA DAY04 案例1&#xff1a;表管理案例2&#xff1a;数据类型案例3&#xff1a;数据批量处理案例4&#xff1a;表头基本约束 1 案例1&#xff1a;表管理 1.1 问题 建库练习建表练习修改表练习 1.2 方案 在MySQL50主机完成练习。 1.3 步骤 实现此案例需要按照如…

升级版“斯坦福AI小镇”来了,这次的AI Agents有点不一样

文娱是大模型落地的一个重要方向。 数科星球原创 作者丨苑晶 编辑丨大兔 八月中旬&#xff0c;AIGC游戏的风潮扑面而来。在游戏大厂按捺不住投入巨资的背景下&#xff0c;数科星球&#xff08;ID&#xff1a;digital-planet&#xff09;接触到了多名业内精英也投身于此。人工…

Kafka第一课概述与安装

生产经验 面试重点 Broker面试重点 代码,开发重点 67 章了解 如何记录行为数据 1. Kafka概述 1.产生原因 前端 传到日志 日志传到Flume 传到HADOOP 但是如果数据特比大&#xff0c;HADOOP就承受不住了 2.Kafka解决问题 控流消峰 Flume传给Kafka 存到Kafka Hadoop 从Kafka…

Qt扫盲-Qt Paint System 概述

Qt Paint System 概述 一、概述二、绘图设备和后端1. Widget2. Image3. Pixmap4. OpenGL绘制设备5. Picture6. 自定义绘制后端 三、绘图与填充1. Drawing2. 填充 Filling 四、坐标系统1. 渲染Window-Viewport转换 五、读写图像文件1. QMovie 六、绘图相关设备 一、概述 Qt的pa…

【数据库】P2 SELECT 与 SQL注释

SELECT 检索单个列检索多个列检索所有列不重复的结果 DISTINCT限制结果 LIMIT 与 OFFSET注释行内注释多行注释 检索单个列 从 Products 表中检索一个名为 prod_name 的列&#xff1b; SELECT prod_name FROM Products;【1】返回的数据可能是无序的&#xff0c;除非规定了顺序…

7.5.tensorRT高级(2)-RAII接口模式下的生产者消费者多batch实现

目录 前言1. RAII接口模式封装生产者消费者2. 问答环节总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-RAI…

原生JS手写扫雷小游戏

场景 实现一个完整的扫雷游戏需要一些复杂的逻辑和界面交互。我将为你提供一个简化版的扫雷游戏示例&#xff0c;帮助你入门。请注意&#xff0c;这只是一个基本示例&#xff0c;你可以根据自己的需求进行扩展和改进。 思路 创建游戏板&#xff08;Grid&#xff09;&#xff1…

软考:中级软件设计师:文件管理,索引文件结构,树型文件结构,位示图,数据传输方式,微内核

软考&#xff1a;中级软件设计师: 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &#xff08;1…

小森动画回忆录(二)-浏览哆啦a梦的四次元口袋

// DoraemonProps结构用于存储单个道具信息 struct DoraemonProps{// 道具名称string name;// 道具用途string UseOfProps; };// 从文件加载哆啦A梦道具信息到vector void LoadDoraemonProps(vector<DoraemonProps>& DoraemonProps) {// 创建文件输入流ifstream str…

人脸识别技术应用安全管理规定(试行)

近年来&#xff0c;人脸识别技术不断成熟&#xff0c;已大量应用于治安管理、金融支付、门禁考勤等诸多领域&#xff0c;极大便捷了公众生活。然而&#xff0c;人脸识别技术在得到广泛应用的同时&#xff0c;仍存在一些不规范现象。人脸识别因其技术特点&#xff0c;涉及公众敏…

node.js 基础高并发案例

什么是高并发 高并发是指系统在同一时间段内需要处理大量的并发请求或同时进行大量的操作。在计算机领域中&#xff0c;高并发通常指的是在短时间内有大量的用户或客户端同时访问系统或进行操作&#xff0c;对系统的并发处理能力提出了较高的要求。 高并发的特点包括 大量的…

Python学习笔记第五十五天(Pandas CSV文件)

Python学习笔记第五十五天 Pandas CSV 文件read_csv()to_string()to_csv() 数据处理head()tail()fillna() info() 后记 Pandas CSV 文件 CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔值&#xff0c;有时也称为字符分隔值&#xff0c;因为分隔字符也可以不是逗号…

【嵌入式学习笔记】嵌入式入门7——IIC总线协议

1.IIC简介 IIC即Inter Integrated Circuit&#xff0c;集成电路总线&#xff0c;是一种同步&#xff0c;串行&#xff0c;半双工通信总线。 IIC总线协议——总线就是传输数据通道&#xff0c;协议就是传输数据的规则&#xff0c;有以下特点&#xff1a; 由时钟线SCL和数据线S…

ES踩坑记录之集群间通信异常造成节点无法加入

问题描述 公司新搭了一套ES集群&#xff0c;4台机器&#xff0c;ES版本7.5.0&#xff0c;前期搭建十分顺利&#xff0c;但集群运行一段时间后会出现问题。问题具体体现为节点间通讯异常&#xff0c;集群会重新选主&#xff0c;但选主之后只能通过新的主节点进行集群操作&#…

【Linux】可重入函数 volatile关键字 以及SIGCHLD信号

可重入函数 volatile关键字 以及SIGCHLD信号 一、可重入函数1、引入2、可重入函数的判断 二、volatile关键字1、引入2、关于编译器的优化的简单讨论 三、SIGCHLD信号 一、可重入函数 1、引入 我们来先看一个例子来帮助我们理解什么是可重入函数&#xff1a; 假设我们现在要对…

EthGlobal 巴黎站 Chainlink 获奖项目介绍

在 Web3 中&#xff0c;每一周都至关重要。项目的发布、版本的发布以及协议的更新以惊人的速度推出。开发者必须保持学习&#xff0c;随时了解最新的工具&#xff0c;并将所有他们所学的东西&#xff08;无论是旧的还是新的&#xff09;联系起来&#xff0c;以构建推动 Web3 技…

PLUS操作流程、应用与实践,多源不同分辨率数据的处理、ArcGIS的应用、PLUS模型的应用、InVEST模型的应用

PLUS模型是由中国地质大学&#xff08;武汉&#xff09;地理与信息工程学院高性能空间计算智能实验室开发&#xff0c;是一个基于栅格数据的可用于斑块尺度土地利用/土地覆盖(LULC)变化模拟的元胞自动机(CA)模型。PLUS模型集成了基于土地扩张分析的规则挖掘方法和基于多类型随机…