Java—— 正则表达式 方法及捕获分组

识别正则表达式的方法

方法名说明
public String[] matches(String regex)

判断字符串是否满足

正则表达式的规则

public string replaceAll(String regex,string newstr)

按照正则表达式的

规则进行替换

public string[] split(String regex)

按照正则表达式的

规则切割字符串

代码实现:

public class Test11 {public static void main(String[] args) {//第一个方法之前已经使用,主要演示后两个方法String str = "熊大mnduub熊二jnjdnjb光头强";String regex = "\\w+";String s = str.replaceAll(regex, "vs");System.out.println(s);//熊大vs熊二vs光头强String[] splitArr = str.split(regex);for (int i = 0; i < splitArr.length; i++) {System.out.println(splitArr[i]);}//熊大//熊二//光头强}
}

捕获分组:

一个括号代表一组,捕获分组就是把这一组的数据捕获出来,再用一次。
正则内部使用:\\组号
正则外部使用:$组号

组号定义规则:

从1开始,连续不间断

以左括号为基准,最左边的是第一组,其次为第二组,以此类推 

案例演示:

需求1:正则内部使用

判断一个字符串的开始字符和结束字符是否一致,只考虑一个字符
举例:a123a  b456b  17891  &abc&
判断一个字符串的开始部分和结束部分是否一致,可以有多个字符
举例:abc123abc  b456b  123789123  &!@abc&!@
需求3:判断一个字符串的开始部分和结束部分是否一致,开始部分每个字符也需要一致
举例:aaa123aaa  bbb456bbb  111789111  &&abc&& 

代码实现:

public class Test12 {public static void main(String[] args) {//判断一个字符串的开始字符和结束字符是否一致,只考虑一个字符//举例:a123a b456b 17891 &abc&//判断一个字符串的开始部分和结束部分是否一致,可以有多个字符//举例:abc123abc b456b 123789123 &!@abc&!@//需求3:判断一个字符串的开始部分和结束部分是否一致,开始部分每个字符也需要一致//举例:aaa123aaa bbb456bbb 111789111 &&abc&&//首字符任意,结束字符与首字符相同,首字符将捕获出来,再用一次//首字符:(.)//中间部分:.+//结束字符:\\1String regex1 = "(.).+\\1";System.out.println("a123a".matches(regex1));//trueSystem.out.println("b456b".matches(regex1));//trueSystem.out.println("17891".matches(regex1));//trueSystem.out.println("&abc&".matches(regex1));//trueSystem.out.println("&abcz".matches(regex1));//falseSystem.out.println("-------------------");//开始部分可以有多个字符,结束部分与其一致,将开始部分捕获出来,再用一次//开始部分:(.+)//中间部分:.+//结束部分:\\1String regex2 = "(.+).+\\1";System.out.println("abc123abc".matches(regex2));//trueSystem.out.println("b456b".matches(regex2));//trueSystem.out.println("123789123".matches(regex2));//trueSystem.out.println("&!@abc&!@".matches(regex2));//trueSystem.out.println("&!@abc&!x".matches(regex2));//falseSystem.out.println("-------------------");//开始部分可以有多个字符,每个字符也需要一致//结束部分与开始部分一致,将开始部分捕获出来,再用一次//开始部分:((.)\\2*))  (.)为第二组,需要重复,可以捕获出来用//中间部分:.+//结束部分:\\1String regex3 = "((.)\\2*).+\\1";System.out.println("aaa123aaa".matches(regex3));//trueSystem.out.println("bbb456bbb".matches(regex3));//trueSystem.out.println("111789111".matches(regex3));//trueSystem.out.println("&&abc&&".matches(regex3));//trueSystem.out.println("aaa123aaz".matches(regex3));//false}
}

需求2:正则外部使用

将字符串:我要学学编编编编程程程程程程
替换为:我要学编程

代码实现:

public class Test13 {public static void main(String[] args) {//将字符串:我要学学编编编编程程程程程程//替换为:我要学编程String str = "我要学学编编编编程程程程程程";//(.) 表示把重复内容的第一个字符看做一组//\\1 表示第一字符再次出现//+ 表示至少一次//$1 表示把正则表达式中第一组的内容,再拿出来用String s = str.replaceAll("(.)\\1+", "$1");System.out.println(s);//我要学编程}
}

非捕获分组:

分组之后不需要再用本组数据,仅仅是把数据括起来。

符号含义举例
(?:正则)获取所有Java(?:8|11|17)
(?=正则)获取前面部分Java(?=8|11|17)
(?!正则)获取不是指定内容的前面部分Java(?!8|11|17)

代码演示:

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test9 {public static void main(String[] args) {String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";//需求1//其中 ?是占位符代表字符串Java,=表示字符串Java后面连接的部分//但是在获取的时候,只获取=前半部分String regex1 = "Java(?=8|11|17)";//调用方法进行爬虫show(regex1,str);//Java//Java//Java//Java//需求2//方式1:常规方式String regex2 = "Java(8|11|17)";show(regex2,str);//Java8//Java11//Java17//Java17//方式2:?是占位符代表字符串Java,:表示字符串Java后面连接的部分//在获取的时候,可以全部获取String reges3 = "Java(?:8|11|17)";show(reges3,str);//Java8//Java11//Java17//Java17//需求3//?是占位符代表字符串Java,!表示字符串Java后面连接的部分///在获取的时候,获取的是除了与!后面连接匹配的子串String regex4 = "Java(?!8|11|17)";show(regex4,str);//Java}//抽取一个方法进行爬虫public static void show(String regex,String str){Pattern p = Pattern.compile(regex);Matcher m = p.matcher(str);while(m.find()){String s = m.group();System.out.println(s);}}
}

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

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

相关文章

达梦并行收集统计信息

达梦收集统计信息速度如何&#xff1f; 答&#xff1a;1分钟1G 大库收集起来可能比较慢&#xff0c;想并行收集需要一些条件 3个参数先了解一下 我把max_parallel_degree改为16 相关说明可以看一下 对一个3G的表收集 收集方法 DBMS_STATS.GATHER_TABLE_STATS( TEST,T1,…

PyTorch 实战:Transformer 模型搭建全解析

Transformer 作为一种强大的序列到序列模型&#xff0c;凭借自注意力机制在诸多领域大放异彩。它能并行处理序列&#xff0c;有效捕捉上下文关系&#xff0c;其架构包含编码器与解码器&#xff0c;各由多层组件构成&#xff0c;涉及自注意力、前馈神经网络、归一化和 Dropout 等…

网页不同渲染方式的应对与反爬机制的处理——python爬虫

文章目录 写在前面爬虫习惯web 网页渲染方式服务器渲染客户端渲染 反爬机制使用session对象使用cookie让请求头信息更丰富使用代理和随机延迟 写在前面 本文是对前两篇文章所介绍的内容的补充&#xff0c;在了解前两篇文章——《爬虫入门与requests库的使用》和《BeautifulSou…

RK3588平台用v4l工具调试USB摄像头实践(亮度,饱和度,对比度,色相等)

目录 前言:v4l-utils简介 一&#xff1a;查找当前的摄像头设备 二&#xff1a;查看当前摄像头支持的v4l2-ctl调试参数 三根据提示设置对应参数&#xff0c;在提示范围内设置 四&#xff1a;常用调试命令 五:应用内执行命令方法 前言:v4l-utils简介 v4l-utils工具是由Linu…

Spring Security基础入门

本入门案例主要演示Spring Security在Spring Boot中的安全管理效果。为了更好地使用Spring Boot整合实现Spring Security安全管理功能&#xff0c;体现案例中Authentication&#xff08;认证&#xff09;和Authorization&#xff08;授权&#xff09;功能的实现&#xff0c;本案…

Trae+DeepSeek学习Python开发MVC框架程序笔记(二):使用4个文件实现MVC框架

修改上节文件&#xff0c;将test2.py拆分为4个文件&#xff0c;目录结构如下&#xff1a; mvctest/ │── model.py # 数据模型 │── view.py # 视图界面 │── controller.py # 控制器 │── main.py # 程序入口其中model.py代码如下&#xff…

从认证到透传:用 Nginx 为 EasySearch 构建一体化认证网关

在构建本地或云端搜索引擎系统时&#xff0c;EasySearch 凭借其轻量、高性能、易部署等优势&#xff0c;逐渐成为众多开发者和技术爱好者的首选。但在实际部署过程中&#xff0c;如何借助 Nginx 为 EasySearch 提供高效、稳定且安全的访问入口&#xff0c;尤其是在身份认证方面…

CPU 虚拟化机制——受限直接执行 (LDE)

1. 引言&#xff1a;CPU虚拟化的核心问题 让多个进程看似同时运行在一个物理CPU上。核心思想是时分共享 (time sharing) CPU。为了实现高效且可控的时分共享&#xff0c;本章介绍了一种关键机制&#xff0c;称为受限直接执行 (Limited Direct Execution, LDE)。 1.1 LDE的基本…

linux 中断子系统链式中断编程

直接贴代码了&#xff1a; 虚拟中断控制器代码&#xff0c;chained_virt.c #include<linux/kernel.h> #include<linux/module.h> #include<linux/clk.h> #include<linux/err.h> #include<linux/init.h> #include<linux/interrupt.h> #inc…

容器修仙传 我的灵根是Pod 第10章 心魔大劫(RBAC与SecurityContext)

第四卷&#xff1a;飞升之劫化神篇 第10章 心魔大劫&#xff08;RBAC与SecurityContext&#xff09; 血月当空&#xff0c;林衍的混沌灵根正在异变。 每道经脉都爬满黑色纹路&#xff0c;神识海中回荡着蛊惑之音&#xff1a;"破开藏经阁第九层禁制…夺取《太古弑仙诀》……

基于c#,wpf,ef框架,sql server数据库,音乐播放器

详细视频: 【基于c#,wpf,ef框架,sql server数据库&#xff0c;音乐播放器。-哔哩哔哩】 https://b23.tv/ZqmOKJ5

精益数据分析(21/126):剖析创业增长引擎与精益画布指标

精益数据分析&#xff08;21/126&#xff09;&#xff1a;剖析创业增长引擎与精益画布指标 大家好&#xff01;在创业和数据分析的探索道路上&#xff0c;我一直希望能和大家携手共进&#xff0c;共同学习。今天&#xff0c;我们继续深入研读《精益数据分析》&#xff0c;剖析…

Spark-streaming核心编程

1.导入依赖‌&#xff1a; <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming-kafka-0-10_2.12</artifactId> <version>3.0.0</version> </dependency> 2.编写代码‌&#xff1a; 创建Sp…

Kafka的ISR机制是什么?如何保证数据一致性?

一、Kafka ISR机制深度解析 1. ISR机制定义 ISR&#xff08;In-Sync Replicas&#xff09;是Kafka保证数据一致性的核心机制&#xff0c;由Leader副本&#xff08;复杂读写&#xff09;和Follower副本(负责备份)组成。当Follower副本的延迟超过replica.lag.time.max.ms&#…

Docker 基本概念与安装指南

Docker 基本概念与安装指南 一、Docker 核心概念 1. 容器&#xff08;Container&#xff09; 容器是 Docker 的核心运行单元&#xff0c;本质是一个轻量级的沙盒环境。它基于镜像创建&#xff0c;包含应用程序及其运行所需的依赖&#xff08;如代码、库、环境变量等&#xf…

数据库监控 | MongoDB监控全解析

PART 01 MongoDB&#xff1a;灵活、可扩展的文档数据库 MongoDB作为一款开源的NoSQL数据库&#xff0c;凭借其灵活的数据模型&#xff08;基于BSON的文档存储&#xff09;、水平扩展能力&#xff08;分片集群&#xff09;和高可用性&#xff08;副本集架构&#xff09;&#x…

OpenFeign和Gateway

OpenFeign和Gateway 一.OpenFeign介绍二.快速上手1.引入依赖2.开启openfeign的功能3.编写客户端4.修改远程调用代码5.测试 三.OpenFeign参数传递1.传递单个参数2.多个参数、传递对象和传递JSON字符串3.最佳方式写代码继承的方式抽取的方式 四.部署OpenFeign五.统一服务入口-Gat…

spark-streaming(二)

DStream创建&#xff08;kafka数据源&#xff09; 1.在idea中的 pom.xml 中添加依赖 <dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming-kafka-0-10_2.12</artifactId><version>3.0.0</version> </…

JAVA聚焦OutOfMemoryError 异常

个人主页 文章专栏 在正文开始前&#xff0c;我想多说几句&#xff0c;也就是吐苦水吧…最近这段时间一直想写点东西&#xff0c;停下来反思思考一下。 心中万言&#xff0c;真正执笔时又不知先写些什么。通常这个时候&#xff0c;我都会随便写写&#xff0c;文风极像散文&…

如何在Spring Boot中配置自定义端口运行应用程序

Spring Boot 应用程序默认在端口 8080 上运行嵌入式 Web 服务器&#xff08;如 Tomcat、Jetty 或 Undertow&#xff09;。然而&#xff0c;在开发、测试或生产环境中&#xff0c;开发者可能需要将应用程序配置为在自定义端口上运行&#xff0c;例如避免端口冲突、适配微服务架构…