Java 正则表达式详解
正则表达式 (Regular Expression,简称 regex) 是一种强大的文本处理工具,可以用来匹配、搜索和替换文本中的特定模式。在 Java 中,正则表达式由 java.util.regex 包提供支持。
1. 理解正则表达式语法
正则表达式使用特殊的字符和符号来定义匹配模式。一些常用的元字符如下:
-
. : 匹配任意单个字符
-
* : 匹配前面的字符零次或多次
-
+ : 匹配前面的字符一次或多次
-
? : 匹配前面的字符零次或一次
-
[] : 匹配括号内的任意单个字符
-
[^] : 匹配不包含在括号内的任意单个字符
-
^ : 匹配字符串开头
-
$ : 匹配字符串结尾
-
\d : 匹配任意数字
-
\w : 匹配任意字母、数字或下划线
-
\s: 匹配任意空白字符
2. 使用 Pattern 和 Matcher 类
Java 中使用 Pattern 类来编译正则表达式,并使用 Matcher 类来执行匹配操作。
代码示例:
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexExample {public static void main(String[] args) {// 1. 定义正则表达式String regex = "\\d+"; // 匹配一个或多个数字// 2. 编译正则表达式Pattern pattern = Pattern.compile(regex);// 3. 创建 Matcher 对象String text = "There are 123 apples and 456 oranges.";Matcher matcher = pattern.matcher(text);// 4. 查找匹配项while (matcher.find()) {// 5. 获取匹配的字符串String matchedString = matcher.group();System.out.println("Matched string: " + matchedString);}}
}
代码解释:
-
Pattern.compile(regex) 将正则表达式字符串编译成 Pattern 对象。
-
matcher.find() 尝试在文本中找到下一个匹配项。
-
matcher.group() 返回当前匹配项的字符串。
输出结果:
Matched string: 123
Matched string: 456
3. 其他常用方法
-
matcher.matches(): 检查整个文本是否完全匹配正则表达式。
-
matcher.lookingAt(): 检查文本开头是否匹配正则表达式。
-
matcher.replaceAll(replacement): 将所有匹配项替换为指定字符串。
-
matcher.replaceFirst(replacement): 将第一个匹配项替换为指定字符串。
代码示例:
String text = "Hello, world!";
String regex = "\\w+"; // 匹配一个或多个字母// 替换所有匹配项为 "***"
String replacedText = matcher.replaceAll("***");
System.out.println(replacedText); // 输出: ***, ***!// 替换第一个匹配项为 "Hi"
String replacedText2 = matcher.replaceFirst("Hi");
System.out.println(replacedText2); // 输出: Hi, world!
4. 练习
-
提取电子邮件地址:
编写一个 Java 程序,使用正则表达式从以下文本中提取所有电子邮件地址:
"Contact us at support@example.com or info@example.org for any inquiries."答案代码:
import java.util.regex.Matcher; import java.util.regex.Pattern;public class EmailExtractor {public static void main(String[] args) {String text = "Contact us at support@example.com or info@example.org for any inquiries.";String regex = "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(text);while (matcher.find()) {System.out.println("Email: " + matcher.group());}} } -
验证电话号码格式:
编写一个 Java 程序,使用正则表达式验证以下电话号码是否符合格式:
123-456-7890答案代码:
import java.util.regex.Pattern;public class PhoneNumberValidator {public static void main(String[] args) {String phoneNumber = "123-456-7890";String regex = "\\d{3}-\\d{3}-\\d{4}";boolean isValid = Pattern.matches(regex, phoneNumber);if (isValid) {System.out.println("Valid phone number.");} else {System.out.println("Invalid phone number.");}} } -
替换文本中的所有空格为下划线:
编写一个 Java 程序,使用正则表达式将以下文本中的所有空格替换为下划线:
"This is a test string."答案代码:
import java.util.regex.Matcher; import java.util.regex.Pattern;public class SpaceReplacer {public static void main(String[] args) {String text = "This is a test string.";String regex = "\\s";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(text);String replacedText = matcher.replaceAll("_");System.out.println(replacedText); // 输出: This_is_a_test_string.} }
结语: 以上就是关于Java中正则表达式的用法,也是必备的知识,对于文本处理方面有很大帮助,希望对各位看官有所帮助,下期见,谢谢~
相关文章:
Java 正则表达式详解
正则表达式 (Regular Expression,简称 regex) 是一种强大的文本处理工具,可以用来匹配、搜索和替换文本中的特定模式。在 Java 中,正则表达式由 java.util.regex 包提供支持。 1. 理解正则表达式语法 正则表达式使用特殊的字符和符号来定义…...
MySQL篇(窗口函数/公用表达式(CTE))(持续更新迭代)
目录 讲解一:窗口函数 一、简介 二、常见操作 1. sumgroup by常规的聚合函数操作 2. sum窗口函数的聚合操作 三、基本语法 1. Function(arg1,..., argn) 1.1. 聚合函数 sum函数:求和 min函数 :最小值 1.2. 排序函数 1.3. 跨行函数…...
Jira Cloud涨价5%-20%,钉钉项目Teambition成优选替代
近日,Jira再次宣布涨价,Cloud版涨幅达到5%-20%,这一消息来源于Atlassian官方面向合作伙伴发布的2024年最新涨价通知。 Atlassian旗下核心产品,包括Jira、Confluence、JiraServiceManagement等的Cloud版本价格将有所提高ÿ…...
Python语言基础教程(下)4.0
✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…...
【HTTP】构造HTTP请求和状态码
状态码 用于响应中,表示响应的结果如何 正确?错误?什么原因? HTTP 中的状态码都是标准约定好的 200 OK 成功了,一切顺利 在抓包到的响应中 404 Not Found 访问的资源(URL 中的路径)没找…...
Delta Lake如何使用
1. 安装 Java 确保你的系统上安装了 Java 8 或更高版本。可以通过以下命令检查 Java 是否已安装: java -version2. 安装 Apache Spark 下载 Spark: 从 Apache Spark 官方网站 下载适合的版本,建议下载预编译的版本(例如…...
面试题 - parallelStream() 有什么缺点 - ForkJoinPool,它和传统的线程池(如 ThreadPoolExecutor)的区别
底层使用 ForkJoinPool ,不同与线程池适用于连续的内存分布的数据结构,如数组和ArrayList(),并不适用于链表适用于 cpu 密集的工作,cpu 的核数多效率高,并行流能否真正提高性能,很大程度上取决于系统的可用…...
切换淘宝最新镜像源npm详细讲解
大家好,我是程序员小羊! 前言: 在中国大陆,npm(Node Package Manager)的默认源由于网络限制,速度可能较慢。为了解决这个问题,淘宝提供了一个镜像源,它同步了 npm 的…...
STM32F407单片机编程入门(十二) FreeRTOS实时操作系统详解及实战含源码
文章目录 一.概要二.什么是实时操作系统三.FreeRTOS的特性四.FreeRTOS的任务详解1.任务函数定义2.任务的创建3.任务的调度原理 五.CubeMX配置一个FreeRTOS例程1.硬件准备2.创建工程3.调试FreeRTOS任务调度 六.CubeMX工程源代码下载七.小结 一.概要 FreeRTOS是一个迷你的实时操…...
网络安全-利用 Apache Mod CGI
目录 一、环境 二、开始操作 三、总结 一、环境 蚁剑官网拉取 二、开始操作 蚁剑连接 一样终端命令不能执行 可以看到putenv已经禁用 我们开始一下,跳入一个新终端且可以执行命令 我们具体看一下干了什么事情 上传了一个htaccess这个文件的作用是让以后所有ant文…...
ACE之ACE_Reactor_Notify
简介 ACE_Reactor_Notify作为Reactor的实现类ACE_Reactor_Impl内部通知来唤醒eventloop 抽象 #mermaid-svg-9UguTLk5S9joDMfi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9UguTLk5S9joDMfi .error-icon{fill:#…...
【小沐学GIS】blender导入OpenStreetMap城市建筑(blender-osm、blosm)
文章目录 1、简介1.1 blender1.2 osm地图 2、OpenStreetMap下载方式2.1 Simple2.2 Overpass API2.3 OSM星球2.4 Geofabrik下载2.5 其他方法2.6 BBBike 3、blender-osm插件3.1 简介3.2 操作 结语 1、简介 1.1 blender https://www.blender.org/ Blender 是一款免费的开源 3D …...
数字IC设计\FPGA 职位经典笔试面试整理--语法篇 Verilog System Verilog(部分)
注: 资料都是基于网上一些博客分享和自己学习整理而成的 Verilog 1. 数据类型 Verilog一共有19种数据类型 基础四种数据类型:reg型,wire型,integer型,parameter型 reg型 reg类型是寄存器数据类型的关键字。寄存…...
【EtherCAT】CiA402简介
目录 1、CiA402是CANopen协议的子协议 2、CiA402是 用于驱动和运动控制的CANopen设备配置文件 3、 CiA402主要由三部分组成 4、CiA介绍 4.1、操作模式 4.2、对象字典 5、一般对象字定义 6、详细对象字定义 7、Profile position mode 8、Homing mode 9、 Position co…...
嵌入式Linux:模块化编程
目录 内核模块 模块特点 最简单的模块 内核模块的程序结构 模块加载函数 模块卸载函数 模块参数 导出符号 作者简介 内核模块 linux内核整体结构非常庞大,其包含的组件也非常多。 怎么把需要的部分包含在内核中呢? 一种办法是把所有的需要的功能都编译到内核中。…...
【两方演化博弈代码复现】:双方演化博弈的原理、概率博弈仿真、相位图、单个参数灵敏度演化
目录-基于MatLab2016b实现 一、演化博弈的原理1. 基本概念2. 参与者的策略3.演化过程 二、MATLAB 代码解读(博弈参与主体(双方)策略选择的动态演化讨程)三、MATLAB 代码解读(博弈主体随着时间策略选择的动态演化讨程&a…...
Selenium打开浏览器后闪退问题解决
笔者这两天在做一个自动化方案,用来优化数据统计。其中一部分数据需要通过云上堡垒机跳转访问,而这个堡垒机在笔者日常使用的火狐浏览器上运行不是很正常(表现在有些复制粘贴按钮显示不太灵敏)。 但在Edge浏览器上基本正常&#…...
【图论】最短路应用
1135. 新年好 题目 提交记录 讨论 题解 视频讲解 MarkDown视图Copy 重庆城里有 nn 个车站,mm 条 双向 公路连接其中的某些车站。 每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的…...
Spring Boot实战:使用策略模式优化商品推荐系统
在现代电子商务平台中,个性化的商品推荐系统是提升用户体验和增加销售额的关键。本文将通过一个Spring Boot实战项目,展示如何利用Java的设计模式——策略模式,来优化商品推荐系统。同时,我们将探讨Spring Boot中的一个重要特性&a…...
Navicat导入Sql文件至Mysql数据库,事务失效
Mysql 版本:8.0.39 Navicat 版本:17.x、16.x 结论: Navicat 导入sql文件,事务不会生效,无论怎么设置 mysql.exe 导入sql文件,事务生效 测试 准备一张表 name约束不能为空,用于测试事务失败…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
