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.pswp.cn/web/71382.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71382.shtml
英文地址,請注明出處:http://en.pswp.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;其他層類似