正则表达式(竞赛篇)

为了更深入了解正则表达式,我们需要首先学习与正则表达式有关的类以及方法。如Pattern和Matcher类,以及部分字符串方法。

我们这里先将简单的字符串方法(String类)进行讲解

在Java中,String类提供了许多用于字符串操作的方法,其中matches()、split()和replaceAll()等方法是非常有用的几个。这些方法在进行字符串匹配、分割和替换操作时非常高效。同时,Java也提供了Pattern和Matcher类,用于更复杂的正则表达式操作。

字符串方法

1.matches()方法

boolean matches(String regex):用于判断字符串是否与指定的正则表达式完全匹配。

代码示例:

String str = "hello123";
boolean isMatch = str.matches("\\w+\\d+"); // 检查是否由字母和数字组成
System.out.println(isMatch); // 输出 true

2.split()方法

1.String[] split(String regex):根据匹配给定的正则表达式拆分字符串,返回一个字符串数组

代码示例:

String str = "apple,banana,orange";
String[] fruits = str.split(",");
for (String fruit : fruits) {
    System.out.println(fruit);
}
// 输出:
// apple
// banana
// orange

2.String[] split(String regex,int limit):limit表示分割次数

代码示例:

String str = "apple,banana,orange,grape";
String[] fruits = str.split(",", 3); // 最多分割成3部分
for (String fruit : fruits) {
    System.out.println(fruit);
}
// 输出:
// apple
// banana
// orange,grape

3.replaceAll()方法

String replaceAll(String regex,String replacement):使用给定的替换字符串替换与正则表达式匹配的部分

代码示例:

String str = "The quick brown fox jumps over the lazy dog.";
String replacedStr = str.replaceAll("\\s+", "_"); // 将所有空白字符替换为下划线
System.out.println(replacedStr);
// 输出: The_quick_brown_fox_jumps_over_the_lazy_dog.

Pattern类和Matcher类是Java中用于处理正则表达式的两个核心类,它们位于java.util.regex包中。这两个类提供了对正则表达式的编译、匹配和查找操作的支持,使得Java程序能够灵活而强大地处理字符串匹配、替换等操作

Pattern 

Pattern类是一个编译后的正则表达式表示为一个不可变的模式。它包含了正则表达式的编译表示以及匹配操作所需的匹配引擎。Pattern类没有公共构造器(即构造方法是private的),要创建一个Pattern对象,我们必须首先调用其公共静态编译方法,将指定的正则表达式编译成一个模式

主要方法

·Pattern compile(String regex):将给定的正则表达式 编译成一个模式

·Matcher matcher(CharSequence input):创建一个匹配器对象,用于对输入字符串进行匹配操作

·String pattern():返回此模式的正则表达式

·int flags():返回此模式的匹配标志

Matcher

Matcher类是对输入字符串进行解析和匹配操作的引擎。它与一个字符序列一起使用,对此序列执行匹配操作。通过调用Pattern对象的matcher方法获得一个Matcher对象,然后可以使用这个对象来进行各种匹配操作,如查找、替换等

主要方法

·boolean matches():尝试将整个区域与模式匹配

·boolean find():尝试查找与该模式匹配的下一个子序列

·boolean find(int start):重置此匹配器,然后尝试从指定索引处开始查找与该模式匹配的下一个子序列

·String group():返回由之前的匹配操作所匹配的输入子序列

·String replaceAll(String replacement):替换匹配此模式的输入序列的每个子序列

·String replaceFirst(String replacement):替换匹配此模式的输入序列的第一个子序列

·int start():返回当前匹配的起始索引

·int end():返回最后匹配字符之后的偏移量

正则表达式

定义:正则表达式是一种文本模式,用于描述在某个文本中所搜索的内容。它由字面值字符(普通字符)和特殊字符组成,可以用来匹配、替换和拆分字符串

用途:正则表达式在Java编程中广泛应用于字符串的模式匹配、替换、分割等操作,可以方便地应用于各种数据处理场景。

语法

·元字符:具有特殊含义的字符。 例如,'.'表示匹配任意字符; '*' 表示0或多个前面的字符; '+' 表示1或多个前面的字符; '?' 表示0或1个前面的字符

·特殊字符类:用于匹配非打印字符。例如, \s 表示空格字符; \n 表示换行字符; \d 表示数字字符; \D表示匹配除数字外的任意一个字符;\w 表示匹配任意一个字母、数字或下划线; \W 表示匹配除字母、数字和下划线外的任意一个字符

·字符类:用方括号 [ ] 表示,可以指定某个字符集中的任意一个字符。 例如,[abc]表示匹配a、b或c;[^abc]表示匹配除a、b、c以外的任意字符;[a-z]表示匹配a到z之间的任意一个小写字母

·边界匹配符:用于匹配文本的边界。例如, ^ 表示匹配文本的开头; $ 表示匹配文本的结尾

·捕获组:用括号 () 表示,可以将匹配到的字符保存在一个变量中,方便后续处理。group()方法用于返回在上一次匹配操作期间由给定组捕获的输入子序列

·限定符:用于指定匹配字符的数量。例如, {n} 表示匹配恰好n个字符; {n,} 表示匹配至少n个字符; {n,m} 表示匹配n到m个字符

·转义字符:用于正则表达式中的特殊字符。例如, \. 表示匹配点字符; \ 表示匹配斜杠字符

注意:Java中正则的转义需用\\ (如\\d表示数字)

总结

虽然String类中的正则表达式方法很方便,但对于更复杂的正则表达式操作,使用Pattern和Matcher类可以提供更多的灵活性和功能

·Pattern类:用于编译正则表达式(compile()方法),创建一个模式(Pattern)对象

·Matcher类:用于对输入字符串进行解释和匹配操作

String类中的matches()、split()和replaceAll()方法在内部实际上也是使用了Pattern和Matcher类来执行正则表达式的匹配和替换操作。这些方法是更高级别的封装,简化了常见的正则表达式操作

但是

Pattern和Matcher类提供了更强大的功能,比如:

·可以多次使用同一个编译过的正则表达式(Pattern对象),提高效率

·Matcher类提供了更多的方法,如find()、lookingAt()、matches()等,用于更复杂的匹配逻辑

·可以进行分组捕获(通过括号()在正则表达式中定义捕获组),并通过Matcher的group(int group)方法访问捕获的内容

简而言之,String类中的正则表达式方法适用于简单的场景,而Pattern和Matcher类则适用于更复杂和高效的正则表达式操作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习入门实战】基于Keras的手写数字识别实战(附完整可视化分析)

​ 本人主页:机器学习司猫白 ok,话不多说,我们进入正题吧 项目概述 本案例使用经典的MNIST手写数字数据集,通过Keras构建全连接神经网络,实现0-9数字的分类识别。文章将包含: 关键概念图解完整实现代码训练过程可视化模型效果深度分析环境准备 import numpy as np impo…

kafka生产端之架构及工作原理

文章目录 整体架构元数据更新 整体架构 消息在真正发往Kafka之前,有可能需要经历拦截器(Interceptor)、序列化器(Serializer)和分区器(Partitioner)等一系列的作用,那么在此之后又会…

docker compose部署flink集群

本次部署2个jobmanager和3个taskmanager 一、部署zookeeper集群 flink使用zookeeper用作高可用 部署集群参考:docker compose部署zookeeper集群-CSDN博客 二、创建目录及配置文件 创建timezone文件,内容填写Asia/Shanghai 手动创建目录&#xff1a…

3dtiles——Cesium ion for Autodesk Revit Add-In插件

一、说明: Cesium已经支持3dtiles的模型格式转换; 可以从Cesium官方Aesset中上传gltf等格式文件转换为3dtiles; 也可以下载插件(例如revit-cesium插件)转换并自动上传到Cesium官方Aseet中。 Revit转3dtiles插件使用…

html文件怎么转换成pdf文件,2025最新教程

将HTML文件转换成PDF文件,可以采取以下几种方法: 一、使用浏览器内置功能 打开HTML文件:在Chrome、Firefox、IE等浏览器中打开需要转换的HTML文件。打印对话框:按下CtrlP(Windows)或CommandP(M…

Linux(socket网络编程)TCP连接

Linux(socket网络编程)TCP连接 基础文件目录函数系统进程控制函数fork()exec系列函数void abort(void)void assert(int expression)void exit(int status)void _exit(int status)int atexit(void (*func)(void))int on_exit(void (*function)(int,void*)…

GeekPad智慧屏编程控制(二)

前面已经实现了智慧屏开关的控制了,接下来再继续实现消息的订阅。 先如下图所示增加几个控件,一个按钮,2个文本框,其中右下角的文本框显示的内容会比较多,需要打开多行和右侧滚动条。 然后添加订阅消息的事件&#xf…

Postgresql 开发环境搭建指南(WindowsLinux)

一、Postgresql 简介 PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 RDBMS 是关系数据库管理系统,是建立实体之间的联系,最后得到的是关系表。 ORDBMS在原来关系数据库的基础上,增加了一些新…

设备智能化无线通信,ESP32-C2物联网方案,小尺寸芯片实现大功能

在科技飞速发展的当下,我们的生活正被各类智能设备悄然改变,它们如同一位位无声的助手,渗透到我们生活的每一个角落,让生活变得更加便捷和丰富多彩。 智能插座、智能照明和简单家电设备在家居领域的应用,为我们的生活…

Unity 编辑器热更C# FastScriptReload

工具源码:https://github.com/handzlikchris/FastScriptReload 介绍 用于运行时修改C#后能快速重新编译C#并生效,避免每次改C#,unity全部代码重新编译,耗时旧且需要重启游戏。 使用 需要手动调整AssetPipeline自动刷新模式&…

kbengine服务器和 数据库 系统路径配置

一、服务器 系统路径配置 二、mysql5.7.44 系统路径配置 mysql 压缩包安装方式 解压压缩包,将解压路径加入 系统环境。 或者 系统变量新增 变量名:MYSQL_HOME 变量值:C:\MyPrograms\mysql-8.0.12-winx64修改系统变量的 path 变量&#xff…

AI代码生成器如何重塑前端开发的工作环境

近年来,人工智能(AI)技术迅猛发展,深刻地改变着各行各业的工作方式。在软件开发领域,AI写代码工具的出现更是掀起了一场革命,尤其对前端开发工程师的工作环境和协作方式产生了深远的影响。本文将深入探讨AI…

前端可以不用依赖后端实现导出大数据了

theme: channing-cyan hightlight: channing-cyan 前言 在我们公司表格数据导出都是前端去处理。一开始数据量不大,倒没什么问题。但随着数据量的加大,问题也逐渐暴露出来。 一天的数据量有一来万条,导出一定时间范围的数据,30…

本地部署DeepSeek Nodejs版

目录 1.下载 Ollama 2.下载DeepSeek模型 3.下载 ollama.js 1.下载 Ollama https://ollama.com/ 下载之后点击安装,等待安装成功后,打开cmd窗口,输入以下指令: ollama -v 如果显示了版本号,则代表已经下载成功了。…

C++ Primer 迭代语句

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

你需要提供管理员权限才能删除此文件夹解决方法

立即高级启动 windows10 搜索“设置”,然后“更新和安全””->“恢复”->“立即重新启动” windows11 搜索“设置”,然后“Windows更新”->“更新历史记录”->“恢复”->“立即重新启动” 疑难解答 点击“疑难解答” 高级选项 启…

408-数据结构

数据结构在学什么? 1.用代码把问题信息化 2.用计算机处理信息 ch1 数据:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 ch2 //假设线性表…

神经网络常见激活函数 9-CELU函数

文章目录 CELU函数导函数函数和导函数图像优缺点pytorch中的CELU函数tensorflow 中的CELU函数 CELU 连续可微指数线性单元:CELU(Continuously Differentiable Exponential Linear Unit),是一种连续可导的激活函数,结合了 ELU 和 …

Ceph集群搭建2025(squid版)

squid版本维护年限 apt install -y cephadmecho >> "deb http://mirrors.163.com/ceph/debian-squid/ bookworm main" echo >> "deb-src http://mirrors.163.com/ceph/debian-squid/ bookworm main"#安装源 cephadm install #开始初始化一个最…

详解电子邮箱工作原理|SMTP、POP3、IMAP、SPF、MIME

写在前面 电子邮件(Email)是一种通过互联网进行异步通信的技术,工作原理涉及多个协议、服务器和客户端协同工作。 接下来我们来介绍一下电子邮箱的工作原理 1. 电子邮件的核心组成部分 邮件客户端:用户直接交互的软件&#xf…