正则表达式(竞赛篇)

为了更深入了解正则表达式,我们需要首先学习与正则表达式有关的类以及方法。如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类则适用于更复杂和高效的正则表达式操作。

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

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

相关文章

用语言模型探索语音风格空间:无需情感标签的情 感TTS

用语言模型探索语音风格空间:无需情感标签的情感TTS 原文:Exploring speech style spaces with language models: Emotional TTS without emotion labels 今天我们要说的是 一种无需情感标签的情感TTS。提出了一个基于FastSpeech2的E-TTS框架&#xff0…

基于Ubuntu2404搭建k8s-1.31集群

k8s 1.31 环境初始化安装Container安装runc安装CNI插件部署k8s集群安装crictl使用kubeadm部署集群节点加入集群部署Calico网络配置dashboard 本实验基于VMware创建的Ubuntu2404虚拟机搭建k8s 1.31版本集群,架构为一主一从,容器运行时使用Container&#…

linux的三剑客和进程处理

Linux三剑客: grep:查找 sed:编辑 awk:分析 grep - 正则表达式 [rootlocalhost ~]# grep ^a hello.txt abc grep - 忽略大小写,还有一些场景需要查询出来对应字符串所在的行号,方便我们快速在文件中定位字…

渗透利器:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)

Burp Suite 联动 XRAY 图形化工具.(主动扫描被动扫描) Burp Suite 和 Xray 联合使用,能够将 Burp 的强大流量拦截与修改功能,与 Xray 的高效漏洞检测能力相结合,实现更全面、高效的网络安全测试,同时提升漏…

时间序列分析(三)——白噪声检验

此前篇章: 时间序列分析(一)——基础概念篇 时间序列分析(二)——平稳性检验 一、相关知识点 白噪声的定义:白噪声序列是一种在统计学和信号处理中常见的随机过程,由一系列相互独立、具有相同…

CEF132编译指南 MacOS 篇 - 构建 CEF (六)

1. 引言 经过前面一系列的精心准备,我们已经完成了所有必要的环境配置和源码获取工作。本篇作为 CEF132 编译指南系列的第六篇,将详细介绍如何在 macOS 系统上构建 CEF132。通过配置正确的编译命令和参数,我们将完成 CEF 的构建工作&#xf…

deepseek + kimi 高效生成PPT

1.在deepseek中生成ppt大纲 2.将大纲复制到kimi中生成PPT kimi:https://kimi.moonshot.cn/

CSS 属性选择器详解与实战示例

CSS 属性选择器是 CSS 中非常强大且灵活的一类选择器,它能够根据 HTML 元素的属性和值来进行精准选中。在实际开发过程中,属性选择器不仅可以提高代码的可维护性,而且能够大大优化页面的样式控制。本文将结合菜鸟教程的示例,从基础…

【嵌入式Linux应用开发基础】read函数与write函数

目录 一、read 函数 1.1. 函数原型 1.2. 参数说明 1.3. 返回值 1.4. 示例代码 二、write 函数 2.1. 函数原型 2.2. 参数说明 2.3. 返回值 2.4. 示例代码 三、关键注意事项 3.1 部分读写 3.2 错误处理 3.3 阻塞与非阻塞模式 3.4 数据持久化 3.5 线程安全 四、嵌…

进程状态

目录 1.进程排队 硬件的队列 进程排队 2.进程的三大状态 什么是状态 运行状态 阻塞状态 挂起状态 3.Linux系统中的进程状态 4.僵尸状态 5.孤儿进程 1.进程排队 硬件的队列 计算机是由很多硬件组成的,操作系统为了管理这些硬件,通常需要为这…

项目复盘:提炼项目成功与失败的经验

项目复盘,顾名思义,就是在项目结束后,对整个项目过程进行全面、系统、深入的回顾与总结。它不仅仅是对项目成果的简单评价,更是对项目执行过程中所有细节、决策、挑战与解决方案的深入剖析。通过复盘,我们可以清晰地看…

Rhel Centos环境开关机自动脚本

Rhel Centos环境开关机自动脚本 1. 业务需求2. 解决方法2.1 rc.local2.2 rc.d2.3 systemd2.4 systemd附着的方法2.5 tuned 3. 测试 1. 业务需求 一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员. 想达到的效果: 由于是非标准的apache或者nginx…

网络安全威胁是什么

1.网络安全威胁的概念 网络安全威胁指网络中对存在缺陷的潜在利用,这些缺陷可能导致信息泄露、系统资源耗尽、非法访问、资源被盗、系统或数据被破坏等。 2.网络安全威胁的类型 物理威胁系统漏洞威胁身份鉴别威胁线缆连接威胁有害程序危险 (1&#x…

网络工程师 (30)以太网技术

一、起源与发展 以太网技术起源于20世纪70年代,最初由Xerox公司的帕洛阿尔托研究中心(PARC)开发。最初的以太网采用同轴电缆作为传输介质,数据传输速率为2.94Mbps(后发展为10Mbps),主要用于解决…

Java 循环结构进阶

二重循环 1.一个循环体内又包含另一个完整的循环结构 2.外城循环变量变化一次,内层循环变量要变化一遍。 二重循环-冒泡排序

SSL域名证书怎么申请?

在数字化时代,网络安全已成为企业和个人不可忽视的重要议题。SSL(Secure Sockets Layer,安全套接层)域名证书,作为保障网站数据传输安全的关键工具,其重要性日益凸显。 一、SSL域名证书:网络安…

玩转观察者模式

文章目录 什么是观察者模式解决方案结构适用场景实现方式观察者模式优缺点优点:缺点:什么是观察者模式 观察者模式通俗点解释就是你在观察别人,别人有什么变化,你就做出什么调整。观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察…

使用mermaid画流程图

本文介绍使用mermaid画流程图,并给出几个示例。 背景 目前,除有明确格式要求的文档外,笔者一般使用markdown写文档、笔记。当文档有图片时,使用Typora等软件可实时渲染,所见即所得。但如果文档接收方没有安装相关工具…

【JVM详解四】执行引擎

一、概述 Java程序运行时,JVM会加载.class字节码文件,但是字节码并不能直接运行在操作系统之上,而JVM中的执行引擎就是负责将字节码转化为对应平台的机器码让CPU运行的组件。 执行引擎是JVM核心的组成部分之一。可以把JVM架构分成三部分&am…

Vim操作笔记

注:本篇文章是追加笔记,用于记录自己的常用操作。 将文本中A字符串替换成B字符串 基本语法: :{范围}s/{目标}/{替换}/{标志} 作用范围 分为前行(:s)、全文(:%s)、选区(:start,ends)等。选区可以在Visual模式下选择区域后输入&#xff1a…