当前位置: 首页 > 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约束不能为空,用于测试事务失败…...

2026最权威的十大降AI率神器实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 随着人工智能生成内容也就是 AIGC 被广泛应用,文本的机器化特征越发明显地呈现出…...

103. ancher WebSocket 与 NGINX OSS 入口控制器的故障

Environment 环境 SUSE Rancher 2.10.3AWS EKS cluster AWS EKS 集群NGINX OSS Ingress Controller (oci://ghcr.io/nginx/charts/nginx-ingress) NGINX OSS 入口控制器(oci:// ghcr.io/nginx/charts/nginx-ingress) Situation 地理位置 After upgrad…...

告别效率黑洞:AOSP构建降本增效实战!更有最新技术报告免费领!

近年来,AI模型训练与大型软件构建的复杂度持续攀升,企业级操作系统的多分支、多产品构建正成为工程团队的“效率黑洞”。在 Android 平台,AOSP 构建尤为突出:全量构建耗时长、增量改动触发大规模重建、CI 队列冗长、资源消耗高等问…...

DeepSeek句式重构指令怎么用?手把手教你降AI率超过30%

第一次操作的话,照着下面的步骤来,15分钟内搞定DeepSeek句式重构指令、降AI、降AIGC率。 工具选嘎嘎降AI(www.aigcleaner.com),达标率99.26%,有退款保障,操作也不复杂。 准备工作 需要准备的&…...

IQR四分位数法是什么?

一、核心概念:四分位数与IQR1. 四分位数(Quartiles)将一组有序数据(从小到大排列)划分为4个相等部分的三个关键分割点,分别记为:Q1(第一四分位数,25%分位数)&…...

效率提升秘籍:使用快马AI一键生成动漫视频批量处理与格式转换工具

效率提升秘籍:使用快马AI一键生成动漫视频批量处理与格式转换工具 最近接手了一个动漫视频处理的项目,需要将大量不同格式的动漫视频统一转换为高清MP4格式,并生成预览缩略图。手动处理不仅耗时耗力,还容易出错。于是我开始寻找自…...

EasyAnimateV5-7b-zh-InP在AI艺术创作中的算法优化实践

EasyAnimateV5-7b-zh-InP在AI艺术创作中的算法优化实践 1. 引言 作为一名数字艺术创作者,我一直在寻找能够提升创作效率和质量的技术工具。最近在尝试使用EasyAnimateV5-7b-zh-InP进行艺术创作时,发现这个模型在图像到视频的转换方面表现出色&#xff…...

别再混淆了!一文讲透NvDecoder里ulNumDecodeSurfaces和ulNumOutputSurfaces到底怎么用

深入解析NvDecoder:解码缓存与输出缓存的本质区别与实战配置 在视频处理领域,NVIDIA的硬件解码器(NVDEC)因其出色的性能和高效的资源利用率而广受开发者青睐。然而,对于许多中高级开发者来说,NvDecoder中ul…...

NXP S32K3开发日记:PIT0的RTI唤醒功能调试全记录(含时钟源配置误区)

NXP S32K3开发实战:PIT0 RTI唤醒功能深度解析与排错指南 作为一名长期深耕汽车电子领域的嵌入式工程师,最近在基于NXP S32K3系列MCU开发低功耗应用时,遇到了一个颇具挑战性的问题——如何可靠地使用PIT0的RTI(Real Time Interrupt…...

Wan2.2-I2V-A14B文生视频模型落地实践:单卡4090D高效推理部署案例

Wan2.2-I2V-A14B文生视频模型落地实践:单卡4090D高效推理部署案例 1. 项目背景与价值 视频内容创作正成为数字时代的重要需求,但传统视频制作流程复杂、成本高昂。Wan2.2-I2V-A14B作为新一代文生视频模型,能够直接将文本描述转化为高质量视…...