当前位置: 首页 > 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…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...