当前位置: 首页 > news >正文

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. 练习

  1. 提取电子邮件地址:

    编写一个 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());}}
    }
  2. 验证电话号码格式:

    编写一个 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.");}}
    }
  3. 替换文本中的所有空格为下划线:

    编写一个 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版本价格将有所提高&#xff…...

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 官方网站 下载适合的版本,建议下载预编译的版本(例如&#xf…...

面试题 - 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约束不能为空,用于测试事务失败…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

2025.6.9总结(利与弊)

凡事都有两面性。在大厂上班也不例外。今天找开发定位问题&#xff0c;从一个接口人不断溯源到另一个 接口人。有时候&#xff0c;不知道是谁的责任填。将工作内容分的很细&#xff0c;每个人负责其中的一小块。我清楚的意识到&#xff0c;自己就是个可以随时替换的螺丝钉&…...

如何做好一份技术文档?从规划到实践的完整指南

如何做好一份技术文档&#xff1f;从规划到实践的完整指南 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...

MLP实战二:MLP 实现图像数字多分类

任务 实战&#xff08;二&#xff09;&#xff1a;MLP 实现图像多分类 基于 mnist 数据集&#xff0c;建立 mlp 模型&#xff0c;实现 0-9 数字的十分类 task: 1、实现 mnist 数据载入&#xff0c;可视化图形数字&#xff1b; 2、完成数据预处理&#xff1a;图像数据维度转换与…...