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

java中获取字符串中满足正则表达式的元素集合

目录

1.说明

2.从"as1285dfSWE45"中提取单个小写字母

3.从"aHs12DF85dfSWE45"中提取连续大写字母

4.从"[1024]*100-52[587] + [24$]"中提取[]中的数字

5.总结


1.说明

在开发中有时需要从字符串中提取特定的字符,如下:

从"as1285dfSWE45"中提取大写字母或者小写字母或者数字

从"[1024]*100-52[587] + [24$]"中提取[]中的数字

2.从"as1285dfSWE45"中提取单个小写字母

        String str = "as1285dfSWE45";// 正则表达式,匹配单个小写字母String regex1 = "[a-z]";// 编译正则表达式Pattern pattern1 = Pattern.compile(regex1);Matcher matcher1 = pattern1.matcher(str);// 创建一个ArrayList存储匹配结果ArrayList<String> numbers = new ArrayList<>();// 查找匹配的序列while (matcher1.find()) {// 获取匹配到的数字字符串,并添加到列表中numbers.add(matcher1.group());}System.out.println(numbers);

结果:

[a, s, d, f]

说明:

正则表达式中的[]表示匹配单个字符,里面的内容是字符组,使用-表示范围,使用^表示相反,如下:

[a-z]      // 匹配所有的小写字母[A-Z]      // 匹配所有的大写字母[a-zA-Z]   // 匹配所有的字母[A-z]      // 匹配所有的字母,同[a-zA-Z][0-9]      // 匹配所有的数字[0-9\.\-]      // 匹配所有的数字、句号、减号[ \n\f\r\t\v]  // 匹配所有的空白字符(空格、换行符、换页符、回车符、水平制表符、垂直制表符)[^0-9]   //匹配非数字字符

3.从"aHs12DF85dfSWE45"中提取连续大写字母

示例:

        String str = "aHs12DF85dfSWE45";// 正则表达式,匹配小写字母String regex1 = "[A-Z]+";// 编译正则表达式Pattern pattern1 = Pattern.compile(regex1);Matcher matcher1 = pattern1.matcher(str);// 创建一个ArrayList存储匹配结果ArrayList<String> numbers = new ArrayList<>();// 查找匹配的序列while (matcher1.find()) {// 获取匹配到的数字字符串,并添加到列表中numbers.add(matcher1.group());}System.out.println(numbers);

结果:

[H, DF, SWE]

说明:

正则表达式中,

+ 号代表前面的字符必须至少出现一次(1次或多次)。

* 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。

? 问号代表前面的字符最多只可以出现一次(0次或1次)。

所以如果要捕获到单个或者多个相连的满足条件的字符,需要使用加号。

上面示例中,使用?结果如下:

[, H, , , , D, F, , , , , S, W, E, , , ]

使用*结果如下:

[, H, , , , DF, , , , , SWE, , , ]

4.从"[1024]*100-52[587] + [24$]"中提取[]中的数字

示例1:

        String str = "[1024]*100-52[587] + [24$]";// 正则表达式,匹配小写字母String regex1 = "\\[\\d+\\]";// 编译正则表达式Pattern pattern1 = Pattern.compile(regex1);Matcher matcher1 = pattern1.matcher(str);// 创建一个ArrayList存储匹配结果ArrayList<String> numbers = new ArrayList<>();// 查找匹配的序列while (matcher1.find()) {// 获取匹配到的数字字符串,并添加到列表中numbers.add(matcher1.group());}System.out.println(numbers);

结果1:

[[1024], [587]]

说明1:

在 Java 的正则表达式中,方括号 [] 是用来定义字符集的元字符,用于指定一组可能出现在匹配位置的字符。如果你需要在正则表达式中匹配方括号本身 [],或者在字符集中匹配方括号字符,你需要对它们进行转义处理。

要在 Java 正则表达式中匹配方括号 [],可以使用反斜杠 \ 进行转义,即将它们写成 \[\]。同样,如果你要在字符集中匹配方括号字符 [],也需要进行相同的转义处理。

例如,如果你想匹配包含方括号 [] 的字符串,可以编写如下的正则表达式:

String regex = "\\[.*\\]";

在上面的例子中,\\[ 匹配左方括号 [\\] 匹配右方括号 ]. 匹配任意字符,* 表示前面的字符可以重复零次或多次。

记得在 Java 中使用正则表达式时,由于反斜杠在字符串中也是转义字符,因此需要双重转义,即使用两个反斜杠 \\ 来表示一个反斜杠。

示例2:

通过上面的方式获取到了中括号及其中的数字,并没有获取到中括号内所有的数字内容,可以通过下面的方式进行实现

        String str = "[1024]*100-52[587] + [24$]";// 正则表达式,匹配小写字母String regex1 = "\\[(\\d+)\\]";// 编译正则表达式Pattern pattern1 = Pattern.compile(regex1);Matcher matcher1 = pattern1.matcher(str);String regex2 = "\\[(\\d+)\\$\\]";// 编译正则表达式Pattern pattern2 = Pattern.compile(regex2);Matcher matcher2 = pattern2.matcher(str);// 创建一个ArrayList存储匹配结果ArrayList<String> numbers = new ArrayList<>();// 查找匹配的序列while (matcher1.find()) {// 获取匹配到的数字字符串,并添加到列表中numbers.add(matcher1.group(1));}// 查找匹配的序列while (matcher2.find()) {// 获取匹配到的数字字符串,并添加到列表中numbers.add(matcher2.group(1));}System.out.println(numbers);

结果:

[1024, 587, 24]

说明:

捕获组的说明:

在正则表达式中,括号()用来创建一个捕获组(capturing group)。捕获组允许您对匹配的子表达式进行分组,并且可以通过索引或名称来获取这些组的内容。

使用括号可以实现以下几个功能:

  1. 分组:通过括号将多个表达式分组在一起,以便对它们作为一个整体进行操作,如应用量词或其他操作符。

  2. 捕获:括号内的内容被视为一个独立的子表达式,可以通过索引(例如group(1))或名称来获取匹配的内容。

  3. 回溯引用:可以在同一个正则表达式中引用先前捕获的内容,从而实现更复杂的模式匹配。

请注意,括号本身并不匹配任何字符,而是用来指示正则表达式引擎对其中的内容进行处理。

所以,匹配之后可以通过索引方式group(1)获取捕获组中的内容。这样就可以拿到[]中的数字

5.总结

①java中反斜线的说明

在Java中,反斜杠\在字符串中被用作转义字符。转义字符指的是由反斜杠跟着一个字符组成的字符序列,表示特殊字符或控制字符。当反斜杠后面跟着某些字符时,它们会组成特定的转义序列,代表一些特殊意义的字符。常见的转义字符包括\n(换行符)、\t(制表符)、\\(反斜杠自身)、\'(单引号)和\"(双引号)等。

例如,如果你想在字符串中表示一个双引号字符",你可以使用转义字符\,即\",来告诉编译器将"视为普通字符而不是字符串结束符。

需要注意的是,因为反斜杠本身是用作转义字符的,如果要在字符串中表示一个反斜杠字符本身,则需要写成\\,即两个反斜杠。这样编译器才能正确解释反斜杠字符。

②捕获组的使用

正则表达式中的()表示匹配其中的内容,例:

(alb) 匹配a或者b

并可以听过索引方式获取满足正则表达式的()中的内容

③?  *  +在正则中的含义

相关文章:

java中获取字符串中满足正则表达式的元素集合

目录 1.说明 2.从"as1285dfSWE45"中提取单个小写字母 3.从"aHs12DF85dfSWE45"中提取连续大写字母 4.从"[1024]*100-52[587] [24$]"中提取[]中的数字 5.总结 1.说明 在开发中有时需要从字符串中提取特定的字符&#xff0c;如下&#xff1a;…...

HTTPS总结

密码学基础 在正式讲解HTTPS协议之前&#xff0c;我们首先要知道一些密码学的知识。 明文&#xff1a; 明文指的是未被加密过的原始数据。 密文&#xff1a;明文被某种加密算法加密之后&#xff0c;会变成密文&#xff0c;从而确保原始数据的安全。密文也可以被解密&#xf…...

Linux之基础IO

1.C语言中的文件操作函数 文件的打开 path为文件路径&#xff0c;mode为打开方式&#xff0c;它们都是字符串。 代码演示&#xff1a; 此时&#xff0c;当前目录中并没有log.txt文件&#xff0c;但是没关系&#xff0c;fopen会在当前路径下创建log.txt文件。 简单来说&#xf…...

【SpringSecurity】十六、OAuth2.0授权服务器、资源服务器的配置(理论部分)

文章目录 0、OAuth2服务端结构1、授权服务配置2、授权服务器 ⇒ 配置客户端详情3、授权服务器 ⇒ 管理令牌配置4、授权服务器&#xff1a;配置端点访问的安全约束5、资源服务器配置 相关&#x1f4d5;&#xff1a; 【OAuth2授权服务器配置完整Demo】 0、OAuth2服务端结构 OAu…...

AtCoder Beginner Contest 346

D - Gomamayo Sequence 状态DP 题意&#xff1a;给定一个长度为n的01字符串&#xff0c;使得只存在一组s[i]s[i1] 其余都是不同的&#xff0c;若使0改变为1 会花相应的费用 a[i] 求最小值 思路&#xff1a;数据为2e5数据太大&#xff0c;贪心不可以想到dp--状态dp 构造01串…...

Arduino智能家居

文章目录 一、接线框图1、下载fritzing 二、Arduino IDE 下载三、实现代码 一、接线框图 1、下载fritzing https://github.com/fritzing/fritzing-app/releases打开的软件界面如下&#xff1a; 二、Arduino IDE 下载 官网地址 P.S. 如果upload代码过程中出现cant open de…...

吴恩达2022机器学习专项课程(一) 3.3 成本函数的公式

问题预览 模型的参数&#xff08;w和b&#xff09;有什么作用&#xff1f;不同的w和b对线性回归模型有什么影响&#xff1f;训练集里的y和线性回归模型预测的y&#xff08;y帽&#xff09;的区别是什么&#xff1f;成本函数的作用是什么&#xff1f;成本函数的公式是什么&…...

Day56-LNMP架构扩展为集群模式实战精讲

Day56-LNMP架构扩展为集群模式实战精讲 1. 企业级标准部署知乎产品wecenter1.1 部署知乎软件Wecenter 2. 企业级迁移数据库到独立服务器2.1 为什么要进行数据库的拆分2.2 数据库拆分架构演变过程&#xff0c;如下图所示2.3 数据库拆分环境规划2.4 数据库拆分架构详细步骤2.4 we…...

Windows 设置多显示器显示

Windows 设置多显示器显示 1. Windows 7 设置 HDMI 输出2. Windows 11 设置多显示器显示References 1. Windows 7 设置 HDMI 输出 2. Windows 11 设置多显示器显示 ​​​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/...

语言模型的原理、实战与评估

语言模型的原理、实战与评估是一个宽泛的话题,下面是对这三个方面简要概述: 语言模型的原理 语言模型(Language Model, LM)是一种统计模型,用于估计一段文本序列的概率分布。它的核心任务是给定一系列词语,计算出这些词语组合成一个完整句子或段落的概率。典型的语言模型…...

【Android 内存优化】Koom核心内存指标分析

文章目录 源码Runtime.getRuntime()/proc/self/status/proc/meminfo 附总结 获取内存的指标有很多&#xff0c;假如我们要写一个用于监控APP内存泄漏的框架的话&#xff0c;主要获取哪些指标呢&#xff1f; 这篇文章来研究下KOOM里面获取到是哪些指标。 下面正文开始&#xff…...

Spring相关框架八股

单例bean是线程安全的吗&#xff1f; AOP 事务失效 Bean生命周期 Bean循环依赖解决 MVC执行流程 自动装配原理 Spring常见注解 SpringMVC注解 SpringBoot注解 MyBatis执行流程 MyBatis延迟加载 MyBatis缓存 SpringCloud五大组件 注册中心Nacos、Eureka 负载均衡Ribbon 服务雪崩…...

RK3588开发笔记-v1.3.0-SDK文件系统分区添加

目录 目录 前言 一、分区文件 二、分区文件初始化 三、板级配置文件修改...

架构评估方法相关知识总结

一、架构评估中的重要概念 定义&#xff1a;软件架构评估是在对架构分析、评估的基础上&#xff0c;对架构策略的选取进行决策。 常用系统架构评估的方式&#xff1a; 1. 基于调查问卷或检查表的方法&#xff1a;该方法的关键是设计好问卷或检查表。缺点是在很大 程度上依赖于评…...

常用ES标准

ES2015&#xff1a; 1.块级作用域const、let const声明对象可修改属性&#xff0c;但不能重新赋值对象。 2.解构赋值 const arr [a1, a2, a3]; const [a1, ...rest] arr; // rest [a2, a3];3.模板字符串 const date "星期一"; console.log(今天是${date};);4…...

Http中Host,Referer,Origin和Access-Control-Allow-Origin

Http中Host&#xff0c;Referer&#xff0c;Origin和Access-Control-Allow-Origin 文章目录 Http中Host&#xff0c;Referer&#xff0c;Origin和Access-Control-Allow-OriginHost定义特性作用 Referer定义特性作用 Origin定义特性作用 Access-Control-Allow-Origin定义特性作用…...

UDP实现聊天室

现象&#xff1a; 源码&#xff1a; 服务器&#xff1a; #include<myhead.h>struct sockaddr_in serveraddr,caddr; enum type_t//枚举 {Login,Chat,Quit, }; typedef struct MSG {char type;//L C Qchar name[32];//char text[128];// }msg_t;typedef struct NODE//链…...

排序算法:如冒泡排序、插入排序、选择排序、快速排序、归并排序

冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a;冒泡排序是一种简单的排序算法。它通过反复交换相邻的元素&#xff0c;将最大的元素逐步“浮”到数组的末尾。基本思想是每次比较相邻的两个元素&#xff0c;如果顺序不对就进行交换&#xff0c;直到整个数组有序。时间…...

深度学习pytorch——GPU加速(持续更新)

使用 .to(device)&#xff0c;以前使用 .cuda() &#xff0c;但是现在基本不使用了。 代码示例&#xff1a; 查看电脑GPU运行情况&#xff1a; 使用Ctrl Shift ESC快捷键&#xff1a;...

StringRedisTemplate

Redis快速入门 3.2.3.StringRedisTemplate 为了节省内存空间&#xff0c;我们可以不使用JSON序列化器来处理value&#xff0c;而是统一使用String序列化器&#xff0c;要求只能存储String类型的key和value。当需要存储Java对象时&#xff0c;手动完成对象的序列化和反序列化。…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...