java后端开发day27--常用API(二)正则表达式爬虫

(以下内容全部来自上述课程)

1.正则表达式(regex)
可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性。
1.作用
- 校验字符串是否满足规则
- 在一段文本中查找满足要求的内容
2.内容定义

ps:一个[]只能匹配一个字符。
\:转义字符,改变后面那个字符原本的含义
\:前面的\是一个转义字符,改变了后面的\原本的含义,把他变成成一个普普通通的\而已。
简单来记:两个\表示一个

API文档:Pattern会有正则表达式的解释,所以不需要去背。
插件:any-rule:右键可以插入想要的正则表达式:可以删去首尾的^和$符号,再把一个\加为两个\。
补充:(?i)忽略后面字母的大小写

2.爬虫
正则表达式的第二个作用:在一段文本中查找满足要求的内容。
分为:本地爬虫和网络爬虫。
Pattern:表示正则表达式。
Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。在大串中去找符合匹配规则的子串。
1.本地爬虫
有如下文本,请按要求爬取数据。
Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,
因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
要求:找出里面所有的JavaXX
package RegexDemo;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Demo1 {/*有如下文本,请按要求爬取数据。Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台要求:找出里面所有的JavaXX*/public static void main(String[] args) {String str = "Java自从95年问世以来,经历了很多版本," +"目前企业中用的最多的是Java8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是Java17," +"相信在未来不久Java17也会逐渐登上历史舞台";//method1(str);//1.获取正则表达式对象Pattern pattern = Pattern.compile("Java\\d{0,2}");//2.获取匹配器对象//拿着matcher对象去读取strMatcher matcher = pattern.matcher(str);//3.开始读取while(matcher.find()) {String s = matcher.group();System.out.println(s);}}private static void method1(String str) {//获取正则表达式对象Pattern pattern = Pattern.compile("Java\\d{0,2}");//获取匹配器对象//m:文本匹配器的对象//str:大串//p:规则//m要在str中找到符合p规则的小串Matcher m = pattern.matcher(str);//拿着文本匹配器从头开始读取,寻找是否有满足规则的子串//如果没有,返回false//如果有,返回true。在底层记录子串的起始索引和结束索引+1//0,4boolean b = m.find();//方法底层会根据find方法记录的索引,从大串中截取子串//subString(起始索引,结尾索引);包含起始索引,不包含结尾索引//0,4 [0,4) 不包含4索引//会把截取的子串返回String s1 = m.group();System.out.println(s1);//继续寻找b = m.find();String s2 = m.group();System.out.println(s2);}
}
2.网络爬虫(了解)

3.带条件的爬取
有如下文本,请按要求爬取数据。
Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,
因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
需求1:爬取版本号为8,11,17的Java文本,但是只要Java,不显示版本号。
需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8,Java11,Java17,Java17
需求3:爬取除了版本号为8,11,17的Java文本。
package RegexDemo;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Demo2 {/*有如下文本,请按要求爬取数据。Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台需求1:爬取版本号为8,11,17的Java文本,但是只要Java,不显示版本号。需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8,Java11,Java17,Java17需求3:爬取除了版本号为8,11,17的Java文本。*/public static void main(String[] args) {String str = "Java自从95年问世以来,经历了很多版本," +"目前企业中用的最多的是Java8和Java11," +"因为这两个是长期支持版本,下一个长期支持版本是Java17," +"相信在未来不久Java17也会逐渐登上历史舞台";//1.定义正则表达式//?理解为前面的数据Java//=表示在Java后面要跟随的数据//()但是获取的时候,只获取前半部分//需求1:String regex1 = "Java(?=8|11|17)";//需求2:String regex2 = "Java(8|11|17)";String regex3 = "Java(?:8|11|17)";//需求3:String regex4 = "Java(?!8|11|17)";Pattern pattern = Pattern.compile(regex4);Matcher matcher = pattern.matcher(str);while(matcher.find()) {System.out.println(matcher.group());}}
}
4.贪婪爬取和非贪婪爬取
有如下文本,请按要求爬取数据。
Java自从95年问世以来,abbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaa,经历了很多版本,目前企业中用的最多的是Java8和Java11,
因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
需求1:按照ab+的方法爬取ab,b尽可能多获取 --------------贪婪爬取
需求2:按照ab+的方法爬取ab,b尽可能少获取 --------------非贪婪爬取
Java当中,默认的就是贪婪爬取
如果我们在数量词+ *的后面加上问号,就是非贪婪爬取。
package RegexDemo;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Demo3 {/*有如下文本,请按要求爬取数据。Java自从95年问世以来,abbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaa,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台需求1:按照ab+的方法爬取ab,b尽可能多获取 --------------**贪婪爬取**需求2:按照ab+的方法爬取ab,b尽可能少获取 --------------**非贪婪爬取***/public static void main(String[] args) {String str = "Java自从95年问世以来,abbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaa, " +"经历了很多版本,目前企业中用的最多的是Java8和Java11, " +"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";String regex1 = "ab+";String regex2 = "ab+?";Pattern pattern = Pattern.compile(regex1);Matcher matcher = pattern.matcher(str);while(matcher.find()) {System.out.println(matcher.group());}}
}
3.正则表达式在字符串中的使用

4.分组
分组就是个小括号。

每组是有组号的,也就是序号。
- 从1开始,连续不间断。
- 以左括号为基准,最左边的是第一组,其次为第二组。
1.捕获分组
捕获分组就是把这一组的数据捕获出来,再用一次。
后续还需要使用本组的数据:
- 正则内部使用:\组号
- 正则外部使用:$组号

//需求1:
String regex1 = "(.).+\\1";
//需求2:
String regex2 = " (.+).+\\1";
//需求3:
//(.):把首字母看成一组
//\\2:把首字母拿出来再次使用
//*:作用于\\2,表示后面重复的内容出现0次或多次
String regex3 ="((.)\\2*).+\\1";
将字符串:我要学学编编编编程程程程程程
替换为:我要学编程
package RegexDemo;public class Demo4 {/*将字符串:我要学学编编编编程程程程程程替换为:我要学编程*/public static void main(String[] args) {String str = "我要学学编编编编程程程程程程";//(.)表示任意字符//\\1表示第一字符再次出现//+至少一次//$1表示把正则表达式中的第一个分组的内容,再拿出来用String s = str.replaceAll("(.)\\1+", "$1");System.out.println(s);}
}
2.非捕获分组
分组后不需要再用本组数据,仅仅是把数据括起来。

相关文章:
java后端开发day27--常用API(二)正则表达式爬虫
(以下内容全部来自上述课程) 1.正则表达式(regex) 可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性。 1.作用 校验字符串是否满足规则在一段文本中查找满足要求的内容 2.内容定义 ps:一…...
拼电商客户管理系统
内容来自:尚硅谷 难度:easy 目 标 l 模拟实现一个基于文本界面的 《 拼电商客户管理系统 》 l 进一步掌握编程技巧和调试技巧,熟悉面向对象编程 l 主要涉及以下知识点: 类结构的使用:属性、方法及构造器 对象的创建与…...
华为:Wireshark的OSPF抓包分析过程
一、OSPF 的5包7状态 5个数据包 1.Hello:发现、建立邻居(邻接)关系、维持、周期保活;存在全网唯一的RID,使用IP地址表示 2.DBD:本地的数据库的目录(摘要),LSDB的目录&…...
Android项目优化同步速度
最近项目需要使用ffmpeg,需要gradle配置引入ffmpeg库,发现原来通过google官方的代码仓,下载太慢了,每秒KB级别的速度。(之前下gradle/gradle plugin都不至于这么慢),于是想到配置国内镜像源来提…...
在线教育网站项目第二步 :学习roncoo-education,服务器为ubuntu22.04.05
一、说明 前端技术体系:Vue3 Nuxt3 Vite5 Vue-Router Element-Plus Pinia Axios 后端技术体系:Spring Cloud Alibaba2021 MySQL8 Nacos Seata Mybatis Druid redis 后端系统:roncoo-education(核心框架:S…...
STM32-GPIO详解
目录 一:GPIO基本概念 编辑 二:GPIO的实际应用 三:功能描述 四:GPIO库函数 五:寄存器 GPIO相关寄存器功能 一:GPIO基本概念 GPIO是英文General Purpose Input/Output的缩写,中文翻译为…...
【Framework系列之Client】UIManager和UIPanel模块介绍
今天来介绍一下UIManager和UIPanel模块,话不多说直接开始。 UIManager 功能介绍 UIManager是管理UIPanel的唯一模块,UIManager的主要功能包括: 提供打开、隐藏、关闭UIPanel的相关接口。负责UIPanel对象的创建以及初始化。负责储存UIPanel对…...
阿里云操作系统控制台——ECS操作与性能优化
引言:在数字化时代,云服务器作为强大的计算资源承载平台,为企业和开发者提供了灵活且高效的服务。本文将详细介绍如何一步步操作云服务器 ECS,从开通到组件安装,再到内存全景诊断,帮助快速上手,…...
【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)
背景: 已经用这个脚本的记得设置Wifi时候,关闭“自动登录” 前几天实在忍受不了CHD-WIFI动不动就断开,一天要重新连接,点登陆好几次。试了下在网上搜有没有CHD-WIFI的自动连接WIFI自动认证脚本,那样我就可以解放双手&…...
第51天:Web开发-JavaEE应用SpringBoot栈身份验证JWT令牌Security鉴权安全绕过
#知识点 1、安全开发-JavaEE-身份验证-JWT&Security 2、安全开发-JavaEE-安全问题-不安全写法&版本漏洞 #开发框架-SpringBoot 参考:Spring Boot 中文文档 一、身份验证的常见技术: 1、JWT 2、Shiro 3、Spring Security 4、OAuth 2.0 5、SSO 6、…...
中原银行:从“小机+传统数据库”升级为“OceanBase+通用服务器”,30 +系统成功上线|OceanBase DB大咖说(十五)
OceanBase《DB 大咖说》第 15 期,我们邀请到了中原银行金融科技部数据团队负责人,吕春雷。本文为本期大咖说的精选。 吕春雷是一位资历深厚的数据库专家,从传统制造企业、IT企业、甲骨文公司到中原银行,他在数据库技术与运维管理…...
Java面试第八山!《Spring框架》
一、Spring框架概述 Spring是Java企业级应用开发的核心框架,通过控制反转(IoC)和 面向切面编程(AOP)实现模块解耦,简化开发流程。其核心优势包括依赖注入、声明式事务管理、集成主流ORM框架(如…...
LangChain教程 - Agent - 支持 9 种 ReAct 交互
引言 LangChain 总结了 9 种经典的复杂模型交互模式,每种都针对特定任务设计,兼具独特优势与适用场景,内容涵盖: ReAct、Function Call、知识库、搜索等,使用这些模式可以大大简化这些场景开发难度。这些模式可以使用…...
蓝桥杯备赛日记【day1】(c++赛道)
一、裁纸刀问题(2022、规律、思维、省赛) 解法思路: 参考题目给出的例子发现。不管要裁剪多少次。最外围的四次是固定的。然后通过观察发现,我们的行的裁剪次数为(m-1) 次,而每行都需要裁剪列数…...
【大模型基础_毛玉仁】1.4 语言模型的采样方法
【大模型基础_毛玉仁】1.4 语言模型的采样方法 1.4 语言模型的采样方法1.4.1 概率最大化方法1)贪心搜索(GreedySearch)2)波束搜索(BeamSearch) 1.4.2 随机采样方法1)Top-K 采样2)Top…...
[内网安全] Windows 本地认证 — NTLM 哈希和 LM 哈希
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:SAM 文件 & Windows 本地认证流程 0x0101:SAM 文件简介 Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的,在登录 Windows 的时候&am…...
基于SNR估计的自适应码率LDPC编译码算法matlab性能仿真,对比固定码率LDPC的系统传输性能
目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 基于序列的SNR估计 2.2 基于SNR估计值进行码率切换 2.3 根据数据量进行码率切换 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印)&…...
opencv 模板匹配方法汇总
在OpenCV中,模板匹配是一种在较大图像中查找特定模板图像位置的技术。OpenCV提供了多种模板匹配方法,通过cv2.matchTemplate函数实现,该函数支持的匹配方式主要有以下6种,下面详细介绍每种方法的原理、特点和适用场景。 1. cv2.T…...
Embedding技术:DeepWalkNode2vec
引言 在推荐系统中,Graph Embedding技术已经成为一种强大的工具,用于捕捉用户和物品之间的复杂关系。本文将介绍Graph Embedding的基本概念、原理及其在推荐系统中的应用。 什么是Graph Embedding? Graph Embedding是一种将图中的节点映射…...
微信小程序注册组件
在微信小程序中注册组件分为自定义组件的创建和全局/局部注册,下面为你详细介绍具体步骤和示例。 自定义组件的创建 自定义组件由四个文件组成,分别是 .js(脚本文件)、.json(配置文件)、.wxml(…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
