[Java 基础]正则表达式

正则表达式是一种强大的文本模式匹配工具,它使用一种特殊的语法来描述要搜索或操作的字符串模式。在 Java 中,我们可以使用 java.util.regex包提供的类来处理正则表达式。

:::color3
正则表达式不止 Java 语言提供了相应的功能,很多其他语言都提供了对其的支撑,比如:Python、Javascript

:::

正则表达式

简单来说,正则表达式就是一个由特殊字符(称为元字符)和普通字符组成的字符串,用来定义一个搜索模式。这个模式可以用来匹配、查找、替换符合特定规则的文本。

例如,模式 \d+ 可以匹配一个或多个数字,模式 [a-z]+ 可以匹配一个或多个小写字母。

常用的元字符:

比如,这是一个匹配大多数邮箱地址的正则表达式:

^[\w\-\.]+@([\w\-]+\.)+[\w\-]{2,4}$
  1. ^
  • 匹配输入的 开始位置
  1. [\w\-\.]+
  • 匹配邮箱的 用户名部分(@ 前面)。
  • [\w\-\.] 表示可以是以下任意一个字符:
    • \w:等价于 [a-zA-Z0-9_](字母、数字或下划线)
    • \-:减号(-
    • \.:点号(.
  • + 表示上面的字符可以重复出现 1 次或多次。
  1. @
  • 邮箱地址中的 @ 符号,用作用户名和域名的分隔。
  1. ([\w\-]+\.)+
  • 匹配域名部分中前面的部分(例如:mail.google.)。
  • [\w\-]+:一个或多个字母、数字、下划线或减号。
  • \.:一个点号。
  • (...) +:这个结构可以出现一次或多次,表示可以匹配像 abc.mail.google. 等。
  1. [\w\-]{2,4}
  • 匹配最后的顶级域名(如 comnetorg)。
  • 范围 {2,4} 表示:2 到 4 个字符之间。
  • 允许的字符:字母、数字、下划线、减号。
  1. $
  • 匹配输入的 结束位置

可以在这个网站方便的看到正则表达式的匹配情况:

https://www.mklab.cn/utils/regex

Java 中使用正则表达式

Java 中使用正则表达式的步骤

  1. 创建 **Pattern** 对象: 使用 Pattern.compile(String regex) 编译正则表达式。
  2. 创建 **Matcher** 对象: 使用 pattern.matcher(CharSequence input)Pattern 对象应用于输入字符串。
  3. 进行匹配操作: 使用 Matcher 对象的方法进行查找、匹配和替换等操作。

比如,我们使用上面的邮箱的正则表达式判断字符串是不是一个邮箱地址:

Pattern pattern = Pattern.compile("[\\w\\-\\.]+@([\\w\\-]+\\.)+[\\w\\-]{2,4}");
Matcher matcher1 = pattern.matcher("111111111@qq.com");
System.out.println(matcher1.matches()); // trueMatcher matcher2 = pattern.matcher("123ab");
System.out.println(matcher2.matches()); // false

:::color3
在 Java 字符串中,反斜杠 \ 是一个特殊字符,用于转义。因此,在正则表达式中要表示字面意义的反斜杠,需要使用双反斜杠 \\。例如,要匹配一个点号 .,正则表达式应该是 \.,但在 Java 字符串中需要写成 "\\."

:::

Matcher 类的常用方法:

方法名作用
matches()尝试将整个输入序列与该模式匹配。只有当整个输入序列完全匹配模式时才返回 true
find()尝试查找与该模式匹配的输入序列的下一个子序列。如果找到匹配项,则返回 true。可以多次调用 find() 来查找所有匹配项
group()返回由上一次匹配操作所匹配的子序列。如果匹配成功,group(0) 返回整个匹配的子串。如果正则表达式中包含分组(用括号 () 包围),可以使用 group(n) 来获取第 n 个分组匹配的子串(索引从 1 开始)
start()返回上一次匹配的起始索引
end()返回上一次匹配的结束索引(不包含)
replaceAll(String replacement)将输入序列中所有匹配该模式的子序列替换为指定的 replacement 字符串。返回一个新的字符串
replaceFirst(String replacement)将输入序列中第一个匹配该模式的子序列替换为指定的 replacement 字符串。返回一个新的字符串

下面是一个使用正则表达式从字符串中统计 Hello 出现次数的例子,每次还打印了找到的 Hello 在字符串中的开始下标(包含)和结束下标(不包含):

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexMatches {public static void main( String[] args ){final String REGEX = "\\bHello\\b";final String INPUT = "Hello world,Hello Tomcat,Hello Java";Pattern p = Pattern.compile(REGEX);Matcher m = p.matcher(INPUT); // 获取 matcher 对象int count = 0;while (m.find()) {count++;System.out.println("Match number " + count);System.out.println("start(): " + m.start());System.out.println("end(): " + m.end());}}
}

String 类提供了一些方便的方法,入参可以使用正则表达式:

方法名作用
matches(String regex)判断字符串是否完全匹配给定的正则表达式
split(String regex)根据给定的正则表达式将字符串分割成字符串数组
replaceAll(String regex, String replacement)将字符串中所有匹配给定的正则表达式的子字符串替换为指定的 replacement 字符串
replaceFirst(String regex, String replacement)将字符串中第一个匹配给定的正则表达式的子字符串替换为指定的 replacement 字符串

下面是使用 String 类的 replaceAll 方法将所有的数字替换为 * 的例子:

String text = "Hello 123 World 456";
String result = text.replaceAll("\\d+", "***"); // Hello *** World ***

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

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

相关文章

ArcGIS安装出现1606错误解决办法

问题背景: 由于最近Arcgis10.2打是有些功能不正常退出,比如arctoolbox中的,table to excel 功能,只要一点击,arcgis就报错退出,平常在使用过程中,也经常出现一些莫名其妙的崩溃现象&#xff0c…

wpf 解决DataGridTemplateColumn中width绑定失效问题

感谢酪酪烤奶 提供的Solution 文章目录 感谢酪酪烤奶 提供的Solution使用示例示例代码分析各类交互流程 WPF DataGrid 列宽绑定机制分析整体架构数据流分析1. ViewModel到Slider的绑定2. ViewModel到DataGrid列的绑定a. 绑定代理(BindingProxy)b. 列宽绑定c. 数据流 关键机制详…

语音转文本ASR、文本转语音TTS

ASR Automatic Speech Recognition,语音转文本。 技术难点: 声学多样性 口音、方言、语速、背景噪声会影响识别准确性;多人对话场景(如会议录音)需要区分说话人并分离语音。 语言模型适配 专业术语或网络新词需要动…

通用embedding模型和通用reranker模型,观测调研

调研Qwen3-Embedding和Qwen3-Reranker 现在有一个的问答库,包括150个QA-pair,用10个query去同时检索问答库的300个questionanswer Embedding模型,query-question的匹配分数 普遍高于 query-answer的匹配分数。比如对于10个query&#xff0c…

基于YOLOv8+Deepface的人脸检测与识别系统

摘要 人脸检测与识别系统是一个集成了先进计算机视觉技术的应用,通过深度学习模型实现人脸检测、识别和管理功能。系统采用双模式架构: ​​注册模式​​:检测新人脸并添加到数据库​​删除模式​​:识别数据库中的人脸并移除匹…

Grdle版本与Android Gradle Plugin版本, Android Studio对应关系

Grdle版本与Android Gradle Plugin版本, Android Studio对应关系 各个 Android Gradle 插件版本所需的 Gradle 版本: https://developer.android.com/build/releases/gradle-plugin?hlzh-cn Maven上发布的Android Gradle Plugin(AGP&#x…

用c语言实现简易c语言扫雷游戏

void test(void) {int input 0;do{menu();printf("请选择: >");scanf("%d", &input);switch (input){menu();case 1:printf("扫雷\n");game();break;case 2:printf("退出游戏\n");break;default:printf("输入…

系统辨识的研究生水平读书报告期末作业参考

这是一份关于系统辨识的研究生水平读书报告,内容系统完整、逻辑性强,并深入探讨了理论、方法与实际应用。报告字数超过6000字 从理论到实践:系统辨识的核心思想、方法论与前沿挑战 摘要 系统辨识作为连接理论模型与客观世界的桥梁&#xff…

开源、免费、美观的 Vue 后台管理系统模板

随着前端技术的不断发展,Vue.js 凭借其轻量、高效、易上手的特性,成为国内外开发者最喜爱的前端框架之一。在构建后台管理系统时,Vue 提供了以下优势: 响应式数据绑定:让页面和数据保持同步,开发效率高。 …

适合 Acrobat DC 文件类型解析

文件类型 (File Type)ProgID (Continuous)ProgID (Classic)主要用途.pdfAcroExch.Document.DCAcroExch.Document.20XX (版本特定)Adobe PDF文档格式,用于存储文档内容和格式.pdfxmlAcroExch.pdfxmlAcroExch.pdfxmlPDF与XML结合的格式,可能用于结构化数据…

C/C++数据结构之漫谈

概述 在当今的数字化时代,无论是刷短视频、社交聊天,还是使用导航软件、网络购物,背后都离不开计算机技术的支持。但你是否想过:为什么同样的功能,有的软件运行得飞快,有的却严重卡顿,半天没有响…

4步使用 vue3 路由

路由的基本使用步骤分为以下4步 第一步&#xff1a;定义路由组件&#xff1a;略 第二步&#xff1a;定义路由链接和路由视图&#xff1a; <template><div class"app-container"><h1>App根组件</h1><router-link to"/home">…

VScode使用npm启动项目以及npm install ,npm start报错问题处理

安装启动步骤 打开cmd 输入指令 npm -v 查看npm是否安装&#xff0c;需要先安装node.js node.js安装&#xff1a;node.js安装 安装包下载后&#xff0c;一直点击next &#xff0c;安装完成&#xff0c;打开cmd 输入 node -v 查看安装是否成功 使用VScode 打开项目&#xf…

《仿盒马》app开发技术分享-- 回收金提现记录查询(端云一体)

开发准备 上一节我们实现了回收金提现的功能&#xff0c;并且成功展示了当前账户的支出列表&#xff0c;但是我们的提现相关的记录并没有很好的给用户做出展示&#xff0c;用户只知道当前账户提现扣款&#xff0c;并不知道回收金的去向&#xff0c;这一节我们就要实现回收金记…

芯片的起点——从硅到晶圆制造

第1篇&#xff1a;芯片的起点——从硅到晶圆制造 在讨论汽车芯片如何“上车”之前&#xff0c;我们必须先回到源头&#xff0c;从一颗芯片是如何从沙子一步步炼成讲起。很多人知道芯片很复杂&#xff0c;却未必清楚它的每一层结构、每一道工艺有何意义。本系列文章将从硅的提纯…

vscode python debugger 如何调试老版本python

找到老版本资源&#xff1a; 找到老版本python debugger插件&#xff0c;现在官方github 都是24之后的release 了&#xff0c;调不了3.6 老项目 pdb&#xff1a; 太麻烦 debugpy vscode python debugger 的底层实现&#xff0c;我们可以指定老版本的debugger 来调试&#…

MVCC 怎么实现的

✅ 什么是 MVCC?它是怎么实现的?(适合基础不牢固者) 一、MVCC 是什么? MVCC 全称是:Multi-Version Concurrency Control,中文叫:多版本并发控制。 主要用于解决数据库的读写并发冲突问题,它的作用是让读操作无需加锁,也能读到符合事务隔离要求的数据版本。 你可以…

深度解析企业风控API技术实践:构建全方位企业风险画像系统

引言 在当前的商业环境中&#xff0c;企业风险评估已成为各类商业决策的重要依据。本文将从技术实践的角度&#xff0c;详细介绍企业风控API的集成应用&#xff0c;重点关注API的调用方式、数据结构以及风险维度的划分&#xff0c;帮助开发者快速构建企业风险画像系统。 关键…

Mac 系统 Node.js 安装与版本管理指南

Mac 系统 Node.js 安装与版本管理指南 一、环境检查 在终端执行以下命令验证当前环境&#xff1a; node -v # 查看 Node.js 版本&#xff08;未安装会提示命令不存在&#xff09; npm -v # 查看 npm 版本&#xff08;需 Node.js 安装完成后生效&#xff09;二、安装方法 …

设备健康管理系统搭建全技术解析:从架构设计到智能运维实践

在工业 4.0 与智能制造深度融合的当下&#xff0c;设备健康管理系统已成为企业实现数字化转型的核心基础设施。据 Gartner 数据显示&#xff0c;采用智能设备健康管理系统的企业&#xff0c;平均可降低 30% 的非计划停机成本。如何基于现代技术栈构建一套高效、精准的设备健康管…