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

java-正则表达式 1

Java中的正则表达式

1. 正则表达式的基本概念

正则表达式(Regular Expression, regex)是一种用于匹配字符串中字符组合的模式。正则表达式广泛应用于字符串搜索、替换和解析。Java通过java.util.regex包提供了对正则表达式的支持,该包包含两个主要的类:PatternMatcher

2. 正则表达式的基本语法

正则表达式由普通字符(例如字符az)和特殊字符(或称为元字符)组成。元字符用于表示某种预定义的匹配模式。

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,可以使用 !! 把类型强转为不可空&#xff1a…...

通过 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…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...