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

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

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

相关文章:

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&#xff08…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...