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

在这里插入图片描述
(以下内容全部来自上述课程)
在这里插入图片描述

1.正则表达式(regex)

可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性。

1.作用

  1. 校验字符串是否满足规则
  2. 在一段文本中查找满足要求的内容

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.非捕获分组

分组后不需要再用本组数据,仅仅是把数据括起来。
请添加图片描述

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

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

相关文章

AI---DevOps常备工具(‌AI-Integrated DevOps Essential Tools)

AI---DevOps常备工具 技术领域正在迅速发展,随着我们步入 2025 年,有一点是明确的:人工智能(AI)不再只是一个流行词,它是每个 DevOps 工程师都需要掌握的工具。随着云环境的复杂性增加、对更快部署的需求以…

Pytorch中的主要函数

目录 一、torch.manual_seed(seed)二、torch.cuda.manual_seed(seed)三、torch.rand(*size, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse)四、给大家写一个常用的自动选择电脑cuda 或者cpu 的小技巧五、torch.version.cuda;torch.bac…

Spring Boot中对接Twilio以实现发送验证码和验证短信码

Twilio介绍 Twilio是一家提供云通信服务的公司,旨在帮助开发者和企业通过简单的API实现各种通信功能。以下是Twilio的一些主要特点和服务介绍: 核心功能 短信服务(SMS):允许用户通过API发送和接收短信,支…

VSCode详细安装步骤,适用于 Windows/macOS/Linux 系统

以下是 Visual Studio Code (VSCode) 的详细安装步骤,适用于 Windows/macOS/Linux 系统: VSCode 的详细安装步骤 一、Windows 系统安装1. 下载安装包2. 运行安装程序3. 验证安装 二、macOS 系统安装1. 方法一:官网下载安装包2. 方法二&#x…

基于PyTorch的深度学习3——基于autograd的反向传播

反向传播,可以理解为函数关系的反向传播。

设备管理系统功能与.NET+VUE(IVIEW)技术实现

在现代工业和商业环境中,设备管理系统(Equipment Management System,简称EMS)是确保设备高效运行和维护的关键工具。本文采用多租户设计的设备管理系统,基于.NET后端和VUE前端(使用IVIEW UI框架&#xff09…

PHP之特性

在你有别的编程语言的基础下&#xff0c;你想学习PHP&#xff0c;可能要了解的PHP特有的东西。 定界符 使用<<<TT(可以是任意字符&#xff0c;但是不可以在别的地方使用过)和TT&#xff0c;会解析html格式和变量&#xff0c;如果在<<<后面加上单引号就会不…

9-Agent大模型中工作流的使用方法分析

目录 关键词 摘要 速览 配置插件进行新闻内容查找的工作流设置 自动化调用用户输入变量的插件配置教程 配置大模型以整理并简要输出新闻内容 新闻内容总结功能调试与优化 搭建与发布工作流优化布局的流程详解 创建和配置智能体工作流程 调试页面与工作流配置演示 思…

记一次:泛微OA集成Mybatis后 insert/update执行成功,但未真正插入或修改数据

背景&#xff1a;通过Mybatis插入数据或更新数据&#xff0c;显示插入/更新成功&#xff0c;查询数据库&#xff0c;发现并未插入成功、数据也没更新成功。下面是Mapper文件 public interface TestOrmMapper {int insertByTest(Param("requestId") Integer requestI…

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控系统&#xff0c;可以分为以下几个步骤&#xff1a; 1. 系统架构设计 前端&#xff1a;使用 Vue.js、React 或 Angular 等前端框架实现用户界面。后端&#xff1a;使用 Spring Boot 提供 RESTful API&#xff0c;负责与…

【大模型系列篇】国产开源大模型DeepSeek-V3技术报告解析

DeepSeek-V3技术报告 目录 DeepSeek-V3技术报告 1. 摘要 2. 引言 3. DeepSeek V3 架构 3.1 基础架构 3.1.1. 多头潜在注意力 3.1.2. DeepSeekMoE和无辅助损失的负载均衡 3.2 多令牌预测 4. 基础设施 4.1 计算集群 4.2 训练框架 4.2.1. DualPipe算法与计算通信协同优…

负载均衡 - 一致性hash算法

构建场景 假如我们有三台缓存服务器编号node0、node1、node2&#xff0c;现在有3000万个key&#xff0c;希望可以将这些个key均匀的缓存到三台机器上&#xff0c;你会想到什么方案呢&#xff1f; 我们可能首先想到的方案&#xff0c;是取模算法hash&#xff08;key&#xff0…

pdfplumber 解析 PDF 表格的原理

&#x1f4cc; pdfplumber 解析 PDF 表格的原理 pdfplumber 处理表格的原理是基于几何分析&#xff08;geometric analysis&#xff09;&#xff0c;它通过分析 PDF 页面中的线条、单元格间距和文本分布&#xff0c;提取表格数据。它主要利用 垂直线&#xff08;vertical line…

洛谷P1334

题目如下 思路&#xff1a; 每次选择最短的两块木板进行合并&#xff0c;直到只剩下一块木板。使用最小堆&#xff08;优先队列&#xff09;来实现这一过程。使用最小堆&#xff1a; 将所有木板的长度放入最小堆&#xff08;优先队列&#xff09; 每次从堆中取出两块最短的木…

JVM(Java Virtual Machine,Java 虚拟机)的作用

JVM&#xff08;Java Virtual Machine&#xff0c;Java 虚拟机&#xff09;的作用至关重要&#xff0c;它是 Java 语言“一次编写&#xff0c;到处运行”&#xff08;Write Once, Run Anywhere&#xff0c;WORA&#xff09;特性的基石&#xff0c;也是 Java 平台的核心组成部分…

总结(尚硅谷Vue3入门到实战,最新版vue3+TypeScript前端开发教程)

1.Vue简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece 1.1.性能的提升 打包大小减少41%。 初次渲染快55%, 更新渲染快133%。 内存减少54%。 1.2.源码的升级 使用Proxy代替defineProperty实现响应式。 重写虚拟DOM的实现和Tree-Shak…

SolidWorks 转 PDF3D 技术详解

在现代工程设计与制造流程中&#xff0c;不同软件间的数据交互与格式转换至关重要。将 SolidWorks 模型转换为 PDF3D 格式&#xff0c;能有效解决模型展示、数据共享以及跨平台协作等问题。本文将深入探讨 SolidWorks 转 PDF3D 的技术原理、操作流程及相关注意事项&#xff0c;…

【深度学习CV】【图像分类】从CNN(卷积神经网络)、ResNet迁移学习到GPU高效训练优化【案例代码】详解

摘要 本文分类使用的是resNet34,什么不用yolo v8&#xff0c;yolo v10系列,虽然他们也可以分类&#xff0c;因为yolo系列模型不纯粹&#xff0c;里面包含了目标检测的架构&#xff0c;所以分类使用的是resNet 本文详细介绍了三种不同的方法来训练卷积神经网络进行 CIFAR-10 图…

OPPO Find N5折叠手机:创新与实用的完美融合,FPC应用展现科技魅力【新立电子】

OPPO Find N5作为2025年新出世的折叠手机&#xff0c;以其卓越的设计、强大的性能以及创新的技术&#xff0c;为消费者带来了全新的使用体验。FPC&#xff08;柔性电路板&#xff09;在其中的运用&#xff0c;也进一步提升了手机的整体性能和用户体验。 OPPO Find N5的最大亮点…

【AD】PCB增加相关图层——以机械层为例

问题&#xff1a;图中PCB仅有机械层1和机械层2&#xff0c;想要在加一个机械层3 解决 1.点击视图—面板—View Configuration&#xff0c;选中机械层右键单击增加层&#xff0c;其他层类似