Java常用正则表达式及使用方法

在 Java 中,Pattern 和 Matcher 类是 java.util.regex 包的核心,用于处理正则表达式。

Pattern 类

Pattern 类表示编译后的正则表达式,它提供了一种将正则表达式字符串编译成可执行对象的方式,以便后续用于匹配操作。

常用方法
  1. compile(String regex):这是一个静态方法,用于将给定的正则表达式字符串编译为 Pattern 对象。
  2. matcher(CharSequence input):创建一个 Matcher 对象,该对象将使用编译好的正则表达式对指定的输入字符串进行匹配操作。
  3. split(CharSequence input):根据正则表达式将输入的字符串分割成字符串数组。
示例代码
import java.util.regex.Pattern;public class PatternExample {public static void main(String[] args) {// 编译正则表达式Pattern pattern = Pattern.compile("\\d+");// 使用 split 方法分割字符串String input = "abc123def456ghi";String[] parts = pattern.split(input);for (String part : parts) {System.out.println(part);}}
}

在上述代码中,首先使用 Pattern.compile("\\d+") 编译了一个匹配一个或多个数字的正则表达式。然后使用 split 方法将输入字符串按照数字进行分割,最后打印分割后的结果。

Matcher 类

Matcher 类用于对输入字符串执行匹配操作,它提供了多种方法来查找、替换和提取匹配的子字符串。

常用方法
  1. find():尝试在输入字符串中查找下一个匹配的子字符串,如果找到则返回 true,否则返回 false
  2. matches():尝试将整个输入字符串与正则表达式进行匹配,如果完全匹配则返回 true,否则返回 false
  3. group():返回上一次匹配操作所匹配的子字符串。
  4. replaceAll(String replacement):将输入字符串中所有匹配的子字符串替换为指定的字符串。
示例代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class MatcherExample {public static void main(String[] args) {// 编译正则表达式Pattern pattern = Pattern.compile("\\d+");// 创建 Matcher 对象Matcher matcher = pattern.matcher("abc123def456ghi");// 使用 find 方法查找匹配的子字符串while (matcher.find()) {System.out.println("找到匹配项: " + matcher.group());}// 使用 replaceAll 方法替换匹配的子字符串String result = matcher.replaceAll("X");System.out.println("替换后的字符串: " + result);}
}

在上述代码中,首先编译了一个匹配一个或多个数字的正则表达式,并创建了一个 Matcher 对象。然后使用 find 方法在输入字符串中查找所有匹配的数字,并打印出来。最后使用 replaceAll 方法将所有匹配的数字替换为字符 X,并打印替换后的字符串。

相关网站

  • 正则表达式在线测试工具:Regex101,可以在线测试和调试正则表达式,同时支持多种编程语言的语法。

正则表达式

正则表达式是用于匹配、查找和替换文本模式的强大工具,在许多编程语言和文本处理工具中都有广泛应用。以下是一些常用的正则表达式及其用途:

1. 匹配数字

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class DigitMatching {public static void main(String[] args) {String input = "abc123";// 匹配单个数字Pattern singleDigitPattern = Pattern.compile("\\d");Matcher singleDigitMatcher = singleDigitPattern.matcher(input);while (singleDigitMatcher.find()) {System.out.println("单个数字匹配结果: " + singleDigitMatcher.group());}// 匹配多个数字Pattern multipleDigitPattern = Pattern.compile("\\d+");Matcher multipleDigitMatcher = multipleDigitPattern.matcher(input);while (multipleDigitMatcher.find()) {System.out.println("多个数字匹配结果: " + multipleDigitMatcher.group());}}
}

2. 匹配字母

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class LetterMatching {public static void main(String[] args) {String input = "ABCabc";// 匹配单个小写字母Pattern lowerCasePattern = Pattern.compile("[a-z]");Matcher lowerCaseMatcher = lowerCasePattern.matcher(input);while (lowerCaseMatcher.find()) {System.out.println("单个小写字母匹配结果: " + lowerCaseMatcher.group());}// 匹配单个大写字母Pattern upperCasePattern = Pattern.compile("[A-Z]");Matcher upperCaseMatcher = upperCasePattern.matcher(input);while (upperTypeCaseMatcher.find()) {System.out.println("单个大写字母匹配结果: " + upperCaseMatcher.group());}// 匹配单个字母(不区分大小写)Pattern anyCasePattern = Pattern.compile("[a-zA-Z]");Matcher anyCaseMatcher = anyCasePattern.matcher(input);while (anyCaseMatcher.find()) {System.out.println("单个字母(不区分大小写)匹配结果: " + anyCaseMatcher.group());}}
}

3. 匹配字母和数字

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class AlphanumericMatching {public static void main(String[] args) {String input = "abc123@#$";// 匹配单个字母或数字Pattern singleAlphanumericPattern = Pattern.compile("[a-zA-Z0-9]");Matcher singleAlphanumericMatcher = singleAlphanumericPattern.matcher(input);while (singleAlphanumericMatcher.find()) {System.out.println("单个字母或数字匹配结果: " + singleAlphanumericMatcher.group());}// 匹配多个字母或数字Pattern multipleAlphanumericPattern = Pattern.compile("[a-zA-Z0-9]+");Matcher multipleAlphanumericMatcher = multipleAlphanumericPattern.matcher(input);while (multipleAlphanumericMatcher.find()) {System.out.println("多个字母或数字匹配结果: " + multipleAlphanumericMatcher.group());}}
}

4. 匹配空白字符

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class WhitespaceMatching {public static void main(String[] args) {String input = "abc  123";// 匹配单个空白字符Pattern singleWhitespacePattern = Pattern.compile("\\s");Matcher singleWhitespaceMatcher = singleWhitespacePattern.matcher(input);while (singleWhitespaceMatcher.find()) {System.out.println("单个空白字符匹配结果: " + singleWhitespaceMatcher.group());}// 匹配多个空白字符Pattern multipleWhitespacePattern = Pattern.compile("\\s+");Matcher multipleWhitespaceMatcher = multipleWhitespacePattern.matcher(input);while (multipleWhitespaceMatcher.find()) {System.out.println("多个空白字符匹配结果: " + multipleWhitespaceMatcher.group());}}
}

5. 匹配邮箱地址

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class EmailMatching {public static void main(String[] args) {String email = "test@example.com";String patternStr = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";Pattern pattern = Pattern.compile(patternStr);Matcher matcher = pattern.matcher(email);if (matcher.matches()) {System.out.println("有效邮箱地址");} else {System.out.println("无效邮箱地址");}}
}

6. 匹配手机号码

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class PhoneNumberMatching {public static void main(String[] args) {String phone = "13800138000";String patternStr = "^1[3-9]\\d{9}$";Pattern pattern = Pattern.compile(patternStr);Matcher matcher = pattern.matcher(phone);if (matcher.matches()) {System.out.println("有效手机号码");} else {System.out.println("无效手机号码");}}
}
关于匹配邮箱详解:

"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";符号的含义

1. 定界符

  • ^:表示匹配字符串的开始位置。在该正则表达式中,它确保匹配是从字符串的起始处开始的,即邮箱地址的起始部分必须符合后续的规则。
  • $:表示匹配字符串的结束位置。意味着整个字符串必须完全匹配正则表达式所定义的模式,直到字符串结束。结合 ^ 和 $ 使用,能保证整个字符串是一个完整的邮箱地址,而不是包含在其他文本中的部分邮箱地址。

2. 用户名部分:[a-zA-Z0-9._%+-]+

  • [a-zA-Z0-9._%+-]:这是一个字符类,它定义了一组允许的字符。
    • a-zA-Z:表示所有的大小写英文字母,即 A 到 Z 和 a 到 z
    • 0-9:表示所有的数字,即 0 到 9
    • ._%+-:这些是特定的符号,在邮箱用户名中是允许出现的。
  • +:是一个量词,表示前面的字符类(即 [a-zA-Z0-9._%+-])必须出现一次或多次。也就是说,邮箱用户名至少要有一个字符,并且只能由上述定义的字符组成。

3. @

这是邮箱地址中用于分隔用户名和域名的固定符号,在正则表达式中直接使用该字符来匹配实际邮箱地址中的 @ 符号。

4. 域名部分:[a-zA-Z0-9.-]+

  • [a-zA-Z0-9.-]:同样是一个字符类,允许的字符包括大小写英文字母、数字、点号 . 和连字符 -。在域名中,这些字符是常见的组成部分。
  • +:表示前面的字符类必须出现一次或多次,即域名部分至少要有一个字符,且由上述定义的字符组成。

5. \\.

  • 点号 . 在正则表达式中有特殊含义,表示匹配任意单个字符。为了匹配实际的点号(即邮箱地址中的域名分隔符),需要使用反斜杠 \ 进行转义。由于在 Java 字符串中,反斜杠本身也需要转义,所以写成 \\.

6. 顶级域名部分:[a-zA-Z]{2,}

  • [a-zA-Z]:表示所有的大小写英文字母。
  • {2,}:是一个量词,表示前面的字符类(即 [a-zA-Z])必须出现至少 2 次。这是因为常见的顶级域名(如 .com.org.cn 等)通常至少由两个字母组成。

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

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

相关文章

车载软件架构 --- 驾驶员不感知的控制器软件运行

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

深度学习3.5 图像分类数据集

%matplotlib inline import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2l代码执行流程图 #mermaid-svg-WWhBmQvijswiICpI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-…

Kotlin集合全解析:List和Map高频操作手册

Kotlin 中 Map 和 List 常用功能总结 List 常用功能 创建 List val immutableList listOf(1, 2, 3) // 不可变列表 val mutableList mutableListOf("a", "b", "c") // 可变列表 val emptyList emptyList<String>() // 空列表基本…

Yocto项目实战教程-第7章定制镜像菜谱与内核菜谱-7.2小节-定制应用程序

&#x1f50d; B站相应的视频教程&#xff1a; &#x1f4cc; Yocto项目实战教程-第7章-定制镜像菜谱与内核菜谱 记得三连&#xff0c;标为原始粉丝,感谢大神支持。 在嵌入式Linux系统开发中&#xff0c;定制专属应用程序往往是最贴近产品交付的那一环。而Yocto项目&#xff0c…

【图像轮廓特征查找】图像处理(OpenCV) -part8

17 图像轮廓特征查找 图像轮廓特征查找其实就是他的外接轮廓。 应用&#xff1a; 图像分割 形状分析 物体检测与识别 根据轮廓点进行&#xff0c;所以要先找到轮廓。 先灰度化、二值化。目标物体白色&#xff0c;非目标物体黑色&#xff0c;选择合适的儿值化方式。 有了轮…

C# 的 字符串插值($) 和 逐字字符串(@) 功能

这段代码使用了 C# 的 字符串插值&#xff08;$&#xff09; 和 逐字字符串&#xff08;&#xff09; 功能&#xff0c;并在 SQL 语句中动态拼接变量。下面详细解释它们的用法&#xff1a; 1. $&#xff08;字符串插值&#xff09; $ 是 C# 的 字符串插值 符号&#xff0c;允许…

mockMvc构建web单元测试学习笔记

web应用本来需要依靠tomcat这个环境运行 现在用mockMvc是为了模拟这个web环境&#xff0c;简化测试 什么是mock(模拟) 模拟对象---mock object是以可控方式模拟真实对象行为的假对象&#xff0c;通过模拟输入数据&#xff0c;验证程序达到预期结果 为什么使用mock对象 因为…

6.7.图的深度优先遍历(英文缩写DFS)

树是特殊的图&#xff0c;没有回路的图就是树 BFS与DFS的区别在于&#xff0c;BFS使用了队列&#xff0c;DFS使用了栈 一.深度优先遍历&#xff1a; 1.树的深度优先遍历&#xff1a; 树的深度优先遍历分为先根遍历和后根遍历。 以树的先根遍历为例&#xff1a; 上述图片里…

VOS3000内存满了怎么删除,录音格式如何转换呢

一、清理VOS3000内存&#xff08;删除旧录音文件&#xff09; 定位录音存储目录 通常录音文件存储在以下路径&#xff08;以实际配置为准&#xff09;&#xff1a; bash 复制 下载 /usr/local/vos/record # 默认录音目录 /var/log/vos/logs # 系统日志目录&#xff08;…

【图问答】DeepSeek-VL 论文阅读笔记

《DeepSeek-VL: Towards Real-World Vision-Language Understanding》 1. 摘要/引言 基于图片问答&#xff08;Visual Question Answering&#xff0c;VQA&#xff09;的任务 2. 模型结构 和 三段式训练 1&#xff09;使用 SigLIP 和 SAM 作为混合的vision encoder&#xf…

MATLAB - 模型预测控制(MPC)使用 ADMM 求解器四分之一汽车悬架悬挂系统动力学控制

系列文章目录 目录 系列文章目录 前言 一、四分车悬架模型 二、道路干扰剖面 三、设计模型预测控制器 四、设置优化求解器 五、辅助函数 前言 本例展示了如何为四分之一汽车悬架系统设计模型预测控制器 (MPC)&#xff0c;采用乘法交替方向法 (ADMM) 求解器来控制主动悬架…

基于多模态融合算法的航空武器毁伤评估技术方案

基于多模态融合算法的航空武器毁伤评估技术方案 1. 引言 航空武器毁伤评估(Damage Assessment, DA)是现代战争中的关键环节,直接影响后续作战决策。传统的人工评估方式效率低、主观性强,且在高强度战场环境下难以实时完成。因此,本研究提出一种基于多模态融合算法的自动…

LeetCode算法题(Go语言实现)_49

题目 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 一、代码实现&#xff08;快速选择…

【HCIA】简易的两个VLAN分别使用DHCP分配IP

前言 之前我们通过 静态ip地址实现了Vlan间通信 &#xff0c;现在我们添加一个常用的DHCP功能。 文章目录 前言1. 配置交换机2. 接口模式3. 全局模式后记修改记录 1. 配置交换机 首先&#xff0c;使用DHCP&#xff0c;需要先启动DHCP服务&#xff1a; [Huawei]dhcp enable I…

【技术派后端篇】技术派通用敏感词替换:原理、实现与应用

在当今互联网环境下&#xff0c;数据脱敏对于国内的互联网企业而言已经成为一项标配。这不仅是为了满足合规性要求&#xff0c;更是保障用户信息安全和企业声誉的重要举措。本文将深入探讨技术派中实现数据脱敏的关键技术——通用敏感词替换&#xff0c;从算法原理到具体实现&a…

Android RK356X TVSettings USB调试开关

Android RK356X TVSettings USB调试开关 平台概述操作-打开USB调试实现源码补充说明 平台 RK3568 Android 11 概述 RK3568 是瑞芯微&#xff08;Rockchip&#xff09;推出的一款高性能处理器&#xff0c;支持 USB OTG&#xff08;On-The-Go&#xff09;和 USB Host 功能。US…

Microsoft Edge for linux debian

下载地址 https://www.microsoft.com/en-us/edge/download?formMA13FJ 安装 # 下载安装包 wget https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_135.0.3179.85-1_amd64.deb?brandM102 # 安装 sudo dpkg -i microsoft…

typedef MVS_API CLISTDEF0IDX(ViewScore, IIndex) ViewScoreArr;

查找 MVS_API 定义 我们没有在 List.h 文件中找到 MVS_API 的定义。MVS_API 很可能在 MVS 库的其他地方定义。一般来说&#xff0c;MVS_API 是控制 OpenMVS 库导入导出的宏&#xff0c;通常会出现在 MVS 的头文件中。为了回答这个问题&#xff0c;我可以提供 MVS 代码中常见的…

5.4/Q1,GBD数据库最新文章解读

文章题目&#xff1a;The global burden of high BMI among adolescents between 1990 and 2021 DOI&#xff1a;10.1038/s43856-025-00838-2 中文标题&#xff1a;1990 年至 2021 年青少年高 BMI 的全球负担 发表杂志&#xff1a;Commun Med 影响因子&#xff1a;1区&#xff…

【形式化验证基础】活跃属性Liveness Property和安全性质(Safety Property)介绍

文章目录 一、Liveness Property1、概念介绍2、形式化定义二、Safety Property1. 定义回顾2. 核心概念解析3. 为什么强调“有限前缀”4. 示例说明4.1 示例1:交通信号灯系统4.2 示例2:银行账户管理系统5. 实际应用的意义三. 总结一、Liveness Property 1、概念介绍 在系统的…