java-正则表达式 1
Java中的正则表达式
1. 正则表达式的基本概念
正则表达式(Regular Expression, regex)是一种用于匹配字符串中字符组合的模式。正则表达式广泛应用于字符串搜索、替换和解析。Java通过java.util.regex包提供了对正则表达式的支持,该包包含两个主要的类:Pattern和Matcher。
2. 正则表达式的基本语法
正则表达式由普通字符(例如字符a到z)和特殊字符(或称为元字符)组成。元字符用于表示某种预定义的匹配模式。
2.1 常用元字符
- •
.:匹配任意单个字符(除换行符)。 - •
*:匹配零次或多次前面的字符。 - •
+:匹配一次或多次前面的字符。 - •
?:匹配零次或一次前面的字符。 - •
[]:定义一个字符类。匹配方括号中的任意字符。 - •
^:匹配字符串的开始。 - •
$:匹配字符串的结束。 - •
|:表示逻辑或(OR)操作。 - •
():用于分组和提取子字符串。
2.2 预定义字符类
- •
\d:匹配任意一个数字字符(0-9)。 - •
\D:匹配任意一个非数字字符。 - •
\w:匹配任意一个字母、数字或下划线字符。 - •
\W:匹配任意一个非字母、非数字、非下划线字符。 - •
\s:匹配任意一个空白字符(空格、制表符等)。 - •
\S:匹配任意一个非空白字符。
3. Pattern和Matcher类
3.1 Pattern类
Pattern类用于编译正则表达式。正则表达式首先被编译为一个Pattern对象,然后使用该对象创建一个Matcher对象。
3.2 Matcher类
Matcher类用于执行匹配操作。它提供了各种方法来检查是否匹配、查找匹配项以及替换文本等。
4. 正则表达式的使用示例
4.1 基本匹配
以下示例展示了如何使用正则表达式匹配一个字符串中的某个模式。
import java.util.regex.*;public class RegexExample {public static void main(String[] args) {String text = "This is a sample text with number 12345 and special character $.";String patternString = "\\d+";Pattern pattern = Pattern.compile(patternString);Matcher matcher = pattern.matcher(text);while (matcher.find()) {System.out.println("Found match: " + matcher.group());}}
}
在上述代码中,正则表达式\d+用于匹配一个或多个连续的数字字符。Matcher对象的find方法用于查找文本中所有符合该模式的子字符串。
4.2 字符类
以下示例展示了如何使用字符类来匹配特定字符集合。
import java.util.regex.*;public class RegexExample {public static void main(String[] args) {String text = "Sample text with various characters: abc ABC 123.";String patternString = "[a-zA-Z]";Pattern pattern = Pattern.compile(patternString);Matcher matcher = pattern.matcher(text);while (matcher.find()) {System.out.println("Found match: " + matcher.group());}}
}
在上述代码中,正则表达式[a-zA-Z]用于匹配所有字母字符,无论大小写。
4.3 分组
正则表达式支持分组功能,通过圆括号()来定义分组。
import java.util.regex.*;public class RegexExample {public static void main(String[] args) {String text = "John Doe, Jane Smith";String patternString = "(\\w+)\\s+(\\w+)";Pattern pattern = Pattern.compile(patternString);Matcher matcher = pattern.matcher(text);while (matcher.find()) {System.out.println("Full match: " + matcher.group(0));System.out.println("First name: " + matcher.group(1));System.out.println("Last name: " + matcher.group(2));}}
}
在上述代码中,正则表达式(\\w+)\\s+(\\w+)用于匹配名字和姓氏。分组捕获了名字和姓氏的不同部分,可以通过group方法分别访问它们。
5. 常用的正则表达式操作
5.1 匹配整个字符串
使用matches方法检查整个字符串是否完全匹配某个模式。
import java.util.regex.*;public class RegexExample {public static void main(String[] args) {String text = "12345";String patternString = "\\d+";boolean matches = Pattern.matches(patternString, text);System.out.println("Matches: " + matches); // 输出:Matches: true}
}
5.2 查找和替换
使用replaceAll方法替换所有匹配的子字符串。
import java.util.regex.*;public class RegexExample {public static void main(String[] args) {String text = "John Doe, Jane Smith";String patternString = "\\b(\\w+)(\\s+)(\\w+)\\b";String replacement = "$3, $1";Pattern pattern = Pattern.compile(patternString);Matcher matcher = pattern.matcher(text);String result = matcher.replaceAll(replacement);System.out.println("Result: " + result); // 输出:Doe, John, Smith, Jane}
}
在上述代码中,\\b(\\w+)(\\s+)(\\w+)\\b用于匹配名字和姓氏,$3, $1用于替换匹配的子字符串,调整名字和姓氏的顺序。
5.3 分割字符串
使用split方法根据正则表达式分割字符串。
import java.util.regex.*;public class RegexExample {public static void main(String[] args) {String text = "one,two,three,four";String patternString = ",";Pattern pattern = Pattern.compile(patternString);String[] parts = pattern.split(text);for (String part : parts) {System.out.println("Part: " + part);}}
}
在上述代码中,逗号(,)作为分隔符,split方法将字符串分割成多个部分。
6. 复杂的正则表达式示例
6.1 验证电子邮件地址
以下正则表达式用于验证电子邮件地址的格式。
import java.util.regex.*;public class RegexExample {public static void main(String[] args) {String[] emails = {"user@example.com","user.name@domain.com","user-name@domain.co.in","user_name@domain.com","username@domain.c","username@domain.com","username@domain..com"};String patternString = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$";Pattern pattern = Pattern.compile(patternString);for (String email : emails) {Matcher matcher = pattern.matcher(email);System.out.println(email + ": " + matcher.matches());}}
}
在上述代码中,正则表达式^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$用于验证电子邮件地址的格式。循环遍历多个电子邮件地址,检查它们是否符合该格式。
6.2 验证电话号码
以下正则表达式用于验证电话号码的格式(例如:123-456-7890)。
import java.util.regex.*;public class RegexExample {public static void main(String[] args) {String[] phoneNumbers = {"123-456-7890","123.456.7890","(123) 456-7890","123 456 7890","1234567890"};String patternString = "^(\\(\\d{3}\\)|\\d{3}[-.\\s]?)\\d{3}[-.\\s]?\\d{4}$";Pattern pattern = Pattern.compile(patternString);for (String phoneNumber : phoneNumbers) {Matcher matcher = pattern.matcher(phoneNumber);System.out.println(phoneNumber + ": " + matcher.matches());}}
}
在上述代码中,正则表达式^(\\(\\d{3}\\)|\\d{3}[-.\\s]?)\\d{3}[-.\\s]?\\d{4}$用于验证电话号码的格式。循环遍历多个电话号码,检查它们是否符合该格式。
相关文章:
java-正则表达式 1
Java中的正则表达式 1. 正则表达式的基本概念 正则表达式(Regular Expression, regex)是一种用于匹配字符串中字符组合的模式。正则表达式广泛应用于字符串搜索、替换和解析。Java通过java.util.regex包提供了对正则表达式的支持,该包包含两…...
Python xlrd库:读excel表格
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
开发中遇到的一个bug
遇到的报错信息是这样的: java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [hm-api,hm-common,hm-service] are excluded from annotation processing 翻译过来就是存在循环引用的情况,导…...
Java面试题:对比不同的垃圾收集器(如Serial、Parallel、CMS、G1)及其适用场景
Java虚拟机(JVM)提供了多种垃圾收集器,每种垃圾收集器在性能和适用场景上各有不同。以下是对几种常见垃圾收集器(Serial、Parallel、CMS、G1)的对比及其适用场景的详细介绍: 1. Serial 垃圾收集器 Serial…...
每日一题——冒泡排序
C语言——冒泡排序 冒泡排序练习 前言:CSDN的小伙伴们,大家好!今天我来给大家分享一种解题思想——冒泡排序。 冒泡排序 冒泡法的核心思想:两两相邻的元素进行比较 2.冒泡排序的算法描述如下。 (1)比较相邻的元素。如果第一 个比…...
javascript浏览器对象模型
BOM对象: BOM 是浏览器对象模型的简称。JavaScript 将整个浏览器窗口按照实现的功能不同拆分成若干个对象; 包含:window 对象、history 对象、location 对象和 document 对象等 window对象: 常用方法: 1.prompt();…...
C语言之链表以及单链表的实现
一:链表的引入 1:从数组的缺陷说起 (1)数组有两个缺陷。一个是数组中所有元素类型必须一致,第二是数组的元素个数必须事先指定并且一旦指定后不能更改 (2)如何解决数组的两个缺陷:数…...
AI在线免费视频工具2:视频配声音;图片说话hedra
1、视频配声音 https://deepmind.google/discover/blog/generating-audio-for-video/ https://www.videotosoundeffects.com/ (免费在线使用) 2、图片说话在线图片生成播报hedra hedra 上传音频与图片即可合成 https://www.hedra.com/ https://www.…...
Elastic字段映射(_source,doc_value,fileddata,index,store)
Elastic字段映射(_source,doc_value,filed_data,index,store) _source: source 字段用于存储 post 到 ES 的原始 json 文档。为什么要存储原始文档呢?因为 ES 采用倒排索引对文本进行搜索,而倒排索引无法存储原始输入…...
kotlin空类型安全 !! ?. ?:
1、定义可空类型 fun main(){// 定义可空类型var x:String? "hello"x null } 2、!! 强转类型 定义可空类型之后,如果使用其内置方法,编译不会通过,因为值有可能为null,可以使用 !! 把类型强转为不可空:…...
通过 WireGuard 组建虚拟局域网 实现多个局域网全互联
本文后半部分代码框较多,欢迎点击原文链接获得更佳的阅读体验。 前言 上一篇关于 WireGuard 的文章通过 Docker 安装 wg-easy 的形式来使用 WireGuard,但 wg-easy 的功能比较有限,并不能发挥出 WireGuard 的全部功力。 如果只是想要出门在外连随时随地的连回家里的局域网,…...
qmt量化交易策略小白学习笔记第47期【qmt编程之期货仓单】
qmt编程之获取期货数据 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 感谢关注,咨询免费开通量化回测与获取实盘权限,欢迎和博主联系! 期货仓单 提示 1…...
点云处理中阶 Sampling
目录 一、什么是点云Sampling 二、示例代码 1、下采样 Downsampling 2、均匀采样 3、上采样 4、表面重建 一、什么是点云Sampling 点云处理中的采样(sampling)是指从大量点云数据中选取一部分代表性的数据点,以减少计算复杂度和内存使用,同时保留点云的几何特征和重…...
为什么print语句被Python3遗弃?
在开发和维护python项目的时候发现经常有print语句报错,原因是python3放弃了print语句 print 语句 早就被列在了不可靠的语言特性列表中,例如 Guido 的“Python 之悔”(Python Regrets)演讲【1】,并计划在 Python 300…...
067、Python 高阶函数的编写:优质冒泡排序
以下写了个简单的冒泡排序函数: def bubble_sort(items: list) -> list:for i in range(1, len(items)):swapped Falsefor j in range(0, len(items) - 1):if items[j] > items[j 1]:items[j], items[j 1] items[j 1], items[j]swapped Trueif not swa…...
【Python】从基础到进阶(一):了解Python语言基础以及变量的相关知识
🔥 个人主页:空白诗 文章目录 引言一、Python简介1.1 历史背景1.2 设计哲学1.3 语言特性1.4 应用场景1.5 为什么选择Python 二、Python语言基础2.1 注释规则2.1.1 单行注释2.1.2 多行注释2.1.3 文件编码声明注释 2.2 代码缩进2.3 编码规范2.3.1 命名规范…...
AI学习指南机器学习篇-KNN的优缺点
AI学习指南机器学习篇-KNN的优缺点 在机器学习领域中,K最近邻(K-Nearest Neighbors,KNN)算法是一种十分常见的分类和回归方法之一。它的原理简单易懂,但在实际应用中也存在一些优缺点。本文将重点探讨KNN算法的优缺点…...
全网最全!25届最近5年上海理工大学自动化考研院校分析
上海理工大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、历年真题PDF 七、初试大纲复试大纲 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试…...
LANG、LC_MESSAGES和LC_ALL
在Linux系统中,环境变量LANG、LC_MESSAGES和LC_ALL用于控制系统和应用程序的语言和区域设置(locale)。它们的具体作用如下: LANG: LANG是最基本的环境变量,用于指定系统的默认语言和区域设置。它是一个全局…...
生成式AI和LLM的一些基本概念和名词解释
1. Machine Learning 机器学习是人工智能(AI)的一个分支,旨在通过算法和统计模型,使计算机系统能够从数据中学习并自动改进。机器学习算法使用数据来构建模型,该模型可用于预测或决策。机器学习应用于各种领域&#x…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
