正則表達式入門

入門

1、提取文章中所有的英文單詞

//1.先創建一個Pattern對象,模式對象,可以理解成就是一個正則表達式對象
Pattern pattern = Pattern.compile("[a-zA-Z]+");
//2.創建一個匹配器對象
//理解:就是 matcher匹配器按照pattern(模式/樣式),到 content文本中去匹配
//找到就返回true,否則就返回false
Matcher matcher = pattern.matcher(content);
//3,可以開始循環匹配
while (matcher.find()){//匹配內容,文本,放到 m.group(0)System.out.println("找到:" +matcher. group(0));
}

2、提取文章中所有的數字
把上述的匹配器改成:

Pattern pattern = Pattern.compile("[0-9]+");

3、提取文章中所有的英文單詞和數字

Pattern pattern = Pattern.compile("([0-9]+)|([a-zA-Z]+)");

4、提取百度熱榜標題

Pattern pattern = Pattern.compile(" <a target=\"_blank\" title=\"(\\S*)\"");

5、提取IP地址

Pattern pattern = Pattern.compile("\\d+\\.\\d+\\.\\d+\\.\\d");

測試

  1. 一段文本,找出所有四個數字連在一起的子串
//1. \\d 表示一個任意的數字
String regStr = "\\d\\d\\d\\d"
//2. 創建模式對象[即正則表達式對象]
Pattern pattern = Pattern.compile(regStr);
//3. 創建匹配器
//說明:創建匹配器 matcher, 按照 正則表達式的規則 去匹配 content 字符串
Matcher matcher = pattern.matcher(content);
// 4. 開始匹配
/*** matcher.find() 完成的任務 (考慮分組)* 什么是分組,比如 (\d\d)(\d\d) ,正則表達式中有() 表示分組,第 1 個()表示第 1 組,第 2 個()表示第 2 組...* 1. 根據指定的規則 ,定位滿足規則的子字符串(比如(19)(98))* 2. 找到后,將 子字符串的開始的索引記錄到 matcher 對象的屬性 int[] groups;* 2.1 groups[0] = 0 , 把該子字符串的結束的索引+1 的值記錄到 groups[1] = 4* 2.2 記錄 1 組()匹配到的字符串 groups[2] = 0 groups[3] = 2* 2.3 記錄 2 組()匹配到的字符串 groups[4] = 2 groups[5] = 4* 2.4.如果有更多的分組.....* 3. 同時記錄 oldLast 的值為 子字符串的結束的 索引+1 的值即 35, 即下次執行 find 時,就從 35 開始匹配**//**matcher.group(0) 分析** 源碼:* public String group(int group) {* if (first < 0)* throw new IllegalStateException("No match found");* if (group < 0 || group > groupCount())* throw new IndexOutOfBoundsException("No group " + group);* if ((groups[group*2] == -1) || (groups[group*2+1] == -1))* return null;* return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();* }* 1. 根據 groups[0]=31 和 groups[1]=35 的記錄的位置,從 content 開始截取子字符串返回* 就是 [31,35) 包含 31 但是不包含索引為 35 的位置** 如果再次指向 find 方法.仍然按照上面分析來執行*///小結
//1. 如果正則表達式有() 即分組
//2. 取出匹配的字符串規則如下
//3. group(0) 表示匹配到的子字符串
//4. group(1) 表示匹配到的子字符串的第 1 組字符串
//5. group(2) 表示匹配到的子字符串的第 2 組字符串
//6. ... 但是分組的數不能越界. System.out.println("找到: " + matcher.group(0));
System.out.println("第 1 組()匹配到的值=" + matcher.group(1));
System.out.println("第 2 組()匹配到的值=" + matcher.group(2))
while(matcher.find()) {System.out.println("找到:" + matcher.group(0));
}
  • 【正則表達式專欄】

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67608.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67608.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67608.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式架構中的事務管理:需要了解的常見解決方案

前言 在現代互聯網應用中&#xff0c;分布式架構越來越常見。隨著系統規模的擴大&#xff0c;越來越多的業務和數據被分布到不同的服務和數據庫中。雖然分布式架構帶來了諸多優勢&#xff0c;但也引入了一個新的問題&#xff1a;分布式事務。 一、什么是分布式事務&#xff1…

《TCP 網絡編程實戰:開發流程、緩沖區原理、三次握手與四次揮手》

一、 TCP 網絡應用程序開發流程 學習目標 能夠知道TCP客戶端程序的開發流程1. TCP 網絡應用程序開發流程的介紹 TCP 網絡應用程序開發分為: TCP 客戶端程序開發TCP 服務端程序開發說明: 客戶端程序是指運行在用戶設備上的程序 服務端程序是指運行在服務器設備上的程序,專門…

新年新挑戰:如何用LabVIEW開發跨平臺應用

新的一年往往伴隨著各種新的項目需求&#xff0c;而跨平臺應用開發無疑是當前備受矚目的發展趨勢。在眾多開發工具中&#xff0c;LabVIEW 以其獨特的圖形化編程方式和強大的功能&#xff0c;為開發跨平臺應用提供了有效的途徑。本文將深入探討如何運用 LabVIEW 開發能夠在不同操…

C 語言實現計算一年中指定日期是第幾天?題】

引言 在編程的世界里&#xff0c;處理日期和時間相關的問題是非常常見的。比如在日歷應用、任務管理系統、數據分析等場景中&#xff0c;經常需要計算某個日期在一年中是第幾天。本文將詳細介紹如何使用 C 語言來實現這一功能&#xff0c;通過分析代碼的結構、邏輯以及可能存在…

rsync安裝與使用-linux015

使用 rsync 可以非常高效地將文件或目錄從一個服務器傳輸到另一個服務器。 能力&#xff1a; 支持 64 位文件、64 位 inode、64 位時間戳、64 位長整型支持套接字對、符號鏈接、符號鏈接時間、硬鏈接、硬鏈接特殊文件、硬鏈接符號鏈接支持 IPv6、訪問時間&#xff08;atimes&…

UE5.3 C++ CDO的初步理解

一.UObject UObject是所有對象的基類&#xff0c;往上還有UObjectBaseUtility。 注釋&#xff1a;所有虛幻引擎對象的基類。對象的類型由基于 UClass 類來定義。 這為創建和使用UObject的對象提供了 函數&#xff0c;并且提供了應在子類中重寫的虛函數。 /** * The base cla…

Pandas基礎06(異常值的檢測與過濾/抽樣/常用聚合函數/數據聚合)

Pandas基礎06 異常值的檢測與過濾 在數據分析中&#xff0c;異常值&#xff08;Outliers&#xff09;是指與其他數據點顯著不同的值。這些值可能由于數據錄入錯誤、設備故障或極端情況而產生&#xff0c;因此在進行數據分析之前&#xff0c;需要對其進行檢測與過濾。本文將介紹…

【PyTorch】4.張量拼接操作

個人主頁&#xff1a;Icomi 在深度學習蓬勃發展的當下&#xff0c;PyTorch 是不可或缺的工具。它作為強大的深度學習框架&#xff0c;為構建和訓練神經網絡提供了高效且靈活的平臺。神經網絡作為人工智能的核心技術&#xff0c;能夠處理復雜的數據模式。通過 PyTorch&#xff0…

jstat命令詳解

jstat 用于監視虛擬機運行時狀態信息的命令&#xff0c;它可以顯示出虛擬機進程中的類裝載、內存、垃圾收集、JIT 編譯等運行數據。 命令的使用格式如下。 jstat [option] LVMID [interval] [count]各個參數詳解&#xff1a; option&#xff1a;操作參數LVMID&#xff1a;本…

App.Current.Services.GetService<UserView>()無限循環

代碼無線循環 public partial class UserView : UserControl{public UserView(){InitializeComponent();InitData();}private void InitData(){DataContext App.Current.Services.GetService<UserView>();}} } DataContext App.Current.Services.GetService<User…

(動態規劃路徑基礎 最小路徑和)leetcode 64

視頻教程 1.初始化dp數組&#xff0c;初始化邊界 2、從[1行到n-1行][1列到m-1列]依次賦值 #include<vector> #include<algorithm> #include <iostream>using namespace std; int main() {vector<vector<int>> grid { {1,3,1},{1,5,1},{4,2,1}…

松靈機器人 scout ros2 驅動 安裝

必須使用 ubuntu22 必須使用 鏈接的humble版本 #打開can 口 sudo modprobe gs_usbsudo ip link set can0 up type can bitrate 500000sudo ip link set can0 up type can bitrate 500000sudo apt install can-utilscandump can0mkdir -p ~/ros2_ws/srccd ~/ros2_ws/src git cl…

pytorch基于GloVe實現的詞嵌入

PyTorch 實現 GloVe&#xff08;Global Vectors for Word Representation&#xff09; 的完整代碼&#xff0c;使用 中文語料 進行訓練&#xff0c;包括 共現矩陣構建、模型定義、訓練和測試。 1. GloVe 介紹 基于詞的共現信息&#xff08;不像 Word2Vec 使用滑動窗口預測&…

C++ 堆棧分配的區別

這兩種聲明方式有什么區別 1.使用 new 關鍵字動態分配內存 動態分配&#xff1a;使用 new 關鍵字會在堆&#xff08;heap&#xff09;上分配內存&#xff0c;并返回一個指向該內存位置的指針。生命周期&#xff1a;對象的生命周期不會隨著聲明它的作用域結束而結束&#xff0…

深入解析 Linux 內核中的頁面錯誤處理機制

在現代操作系統中,頁面錯誤(Page Fault)是內存管理的重要組成部分。當程序試圖訪問未映射到物理內存的虛擬內存地址時,CPU 會觸發頁面錯誤異常。Linux 內核通過一系列復雜的機制來處理這些異常,確保系統的穩定性和性能。本文將深入解析 Linux 內核中處理頁面錯誤的核心代碼…

MATLAB-Simulink并行仿真示例

一、概述 在進行simulink仿真的過程中常常遇到CPU利用率較低&#xff0c;仿真緩慢的情況&#xff0c;可以借助并行仿真改善這些問題&#xff0c;其核心思想是將參數掃描、蒙特卡洛分析或多工況驗證等任務拆分成多個子任務&#xff0c;利用多核CPU或計算集群的并行計算能力&…

Workbench 中的熱源仿真

探索使用自定義工具對移動熱源進行建模及其在不同行業中的應用。 了解熱源動力學 對移動熱源進行建模為各種工業過程和應用提供了有價值的見解。激光加熱和材料加工使用許多激光束來加熱、焊接或切割材料。盡管在某些情況下&#xff0c;熱源 &#xff08;q&#xff09; 不是通…

I2C基礎知識

引言 這里祝大家新年快樂&#xff01;前面我們介紹了串口通訊協議&#xff0c;現在我們繼續來介紹另一種常見的簡單的串行通訊方式——I2C通訊協議。 一、什么是I2C I2C 通訊協議&#xff08;Inter-Integrated Circuit&#xff09;是由Phiilps公司在上個世紀80年代開發的&#…

深度學習 DAY3:NLP發展史

NLP發展史 NLP發展脈絡簡要梳理如下&#xff1a; (遠古模型&#xff0c;上圖沒有但也可以算NLP&#xff09; 1940 - BOW&#xff08;無序統計模型&#xff09; 1950 - n-gram&#xff08;基于詞序的模型&#xff09; (近代模型&#xff09; 2001 - Neural language models&am…

CSS 背景與邊框:從基礎到高級應用

CSS 背景與邊框&#xff1a;從基礎到高級應用 1. CSS 背景樣式1.1 背景顏色示例代碼&#xff1a;設置背景顏色 1.2 背景圖像示例代碼&#xff1a;設置背景圖像 1.3 控制背景平鋪行為示例代碼&#xff1a;控制背景平鋪 1.4 調整背景圖像大小示例代碼&#xff1a;調整背景圖像大小…