【正則表達式】 正則表達式的分組和引用

?? 個人主頁:(時光煮雨)
?? 高質量專欄:vulnhub靶機滲透測試
?? 希望得到您的訂閱和支持~
?? 創作高質量博文(平均質量分95+),分享更多關于網絡安全、Python領域的優質內容!(希望得到您的關注~)


??目錄??

  • 前言
  • ??一、基本語法
  • ??二、分組類型
    • ??2.1. 捕獲分組(Capturing Group)
    • ??2.2. 非捕獲分組(Non-capturing Group)
    • ??2.3. 命名分組(Named Capturing Group)
  • ??三、分組引用
    • ??3.1. 反向引用(Backreference)
    • ??3.2. 命名反向引用
  • ??3.3. 替換引用
  • ??四、分組的高級應用
    • ??4.1. 條件匹配
    • ??4.2. 平衡組(高級特性)
  • ??五、常見問題與陷阱
  • ??六、練習挑戰
  • ??七、總結要點
  • ?? 期待與你共同進步
  • ?? 參考文檔


前言

在正則表達式中,分組(Grouping)允許我們將多個字符視為一個整體單元,就像數學中的括號一樣。分組主要有兩個作用:

  1. 將多個字符作為一個整體:可以對這個整體應用量詞(如 *、+、?、{n})
  2. 捕獲匹配的內容:可以在后續引用或提取這部分匹配的內容

??一、基本語法

使用圓括號 () 來創建分組:

(表達式)

例如,(ab)+ 可以匹配 “ab”、“abab”、“ababab” 等,但不能匹配 “a” 或 “b”。


??二、分組類型

正則表達式中有幾種不同類型的分組:

??2.1. 捕獲分組(Capturing Group)

最常見的分組形式,會捕獲匹配的內容并分配一個編號(從1開始)。

(\d{4})-(\d{2})-(\d{2})  # 匹配日期格式 YYYY-MM-DD

這個表達式會創建3個分組:

  • 分組1:4位數字的年份
  • 分組2:2位數字的月份
  • 分組3:2位數字的日期

??2.2. 非捕獲分組(Non-capturing Group)

使用 (?:表達式) 語法,表示只分組但不捕獲。

(?:Mr|Ms|Mrs)\. (\w+)  # 匹配 "Mr. Smith" 但只捕獲 "Smith"

??2.3. 命名分組(Named Capturing Group)

為分組指定名稱,提高可讀性(不同語言語法可能不同)。

Python 示例:

(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})

JavaScript 示例:

(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})

??三、分組引用

分組最強大的功能之一是可以在正則表達式內部或外部引用已匹配的內容。

??3.1. 反向引用(Backreference)

在正則表達式內部引用前面的分組,使用 \數字 語法:

(\w+) \1  # 匹配重復的單詞,如 "hello hello"

這個模式會匹配兩個相同的單詞,中間用空格分隔。

??3.2. 命名反向引用

對于命名分組,可以使用名稱來引用:

(?P<word>\w+) (?P=word)  # Python 語法
\k<word>                 # JavaScript 語法

??3.3. 替換引用

在替換操作中引用分組內容:

Python 示例:

import re
text = "2023-05-15"
new_text = re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', text)
# 結果: "05/15/2023"

JavaScript 示例:

let text = "2023-05-15";
let newText = text.replace

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

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

相關文章

Grafana 導入儀表盤失敗:從日志排查到解決 max\_allowed\_packet 問題

問題背景 近期在為項目搭建一套基于 Prometheus 和 Grafana 的可觀測性體系。在完成基礎部署后&#xff0c;我準備導入一個功能相對復雜的官方儀表盤模板&#xff0c;以便快速監控各項指標。然而&#xff0c;當上傳儀表盤的 JSON 文件并點擊保存時&#xff0c;Grafana 界面卻反…

java對接物聯網設備(一)——使用okhttp網絡工具框架對接標準API接口

當前無論是在互聯網領域&#xff0c;還是物聯網項目下&#xff0c;亦或者各類應用類軟件&#xff0c;基于http標準接口的對接是目前市面上最常見也是最簡單的數據交互方式之一&#xff0c;甚至可以說是最流行的&#xff0c;因為它不依賴的各種插件或者服務。 開發者或者提供服…

版本管理系統與平臺(權威資料核對、深入解析、行業選型與國產平臺補充)

本文是一篇基于公開權威資料&#xff08;官方文檔、產品頁、廠商技術文章與技術社區討論&#xff09;重新檢索、核對后撰寫的詳盡博文。內容覆蓋&#xff1a;版本控制基礎、主流 VCS 工具深度比較、常見托管/協作平臺&#xff08;含中國本土平臺&#xff1a;Gitee / GitCode / …

計算機畢設選題:基于Python+Django的B站數據分析系統的設計與實現【源碼+文檔+調試】

精彩專欄推薦訂閱&#xff1a;在 下方專欄&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主頁&#xff1a;計算機畢設木哥&#x1f525; &#x1f496; 文章目錄 一、項目介紹二…

Easy ES技術詳解

從Java代碼示例到高級特性 框架介紹 Easy-Es 是一款以 “簡化 Elasticsearch 操作的 ORM 框架” 為核心定位的開源工具&#xff0c;旨在通過低代碼設計降低 Elasticsearch 的使用門檻。作為國內 Top1 Elasticsearch 搜索引擎框架&#xff0c;其最顯著的優勢在于大幅縮減代碼量…

【51單片機】【protues仿真】基于51單片機停車場的車位管理系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、LCD1602液晶顯示 2、統計并顯示停車場現有車輛數和已停放過車輛數 3、按鍵設置總車位數以及剩余車位數 4、統計并顯示累計駛入和累計駛出車輛數 5、用16個LED燈模擬停車位 6、車…

【Python】S1 基礎篇 P4 if 語句指南

目錄簡單示例條件測試檢查是否相等與不等檢查多個條件檢查特定的值是否在/不在列表中布爾表達式if語句簡單的if語句if-else語句if-elif-else語句使用if語句處理列表檢查特殊元素確定列表非空使用多個列表總結if 語句是Python編程中最基本也是最重要的控制結構之一。它允許程序根…

【實戰中提升自己】內網安全部署之STP的安全技術部署

1 1拓撲 「模擬器、工具合集」復制整段內容 鏈接&#xff1a;https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil1 STP的安全技術部署 說明&#xff1a;為什么需要注意STP的安全呢&#xff0c;在二層中其實存在很多不安全的因素&#xff0c;物理上…

GEM5學習(5): ARM 架構功耗仿真

運行腳本基于gem5提供的腳本&#xff0c;啟動功耗仿真。實際工作中應該不會用gem5進行功耗的仿真吧&#xff0c;Cadence和Synopsys好像都有配套的的功耗建模工具。事先要配置好 IMG_ROOT的環境變量./build/ARM/gem5.opt configs/example/arm/fs_power.py \--caches \--bootl…

【Python基礎】 19 Rust 與 Python if 語句對比筆記

一、基本語法對比 Rust if 語句 // 基本形式 let number 7;if number < 5 {println!("condition was true"); } else {println!("condition was false"); }// 多條件 else if if number % 4 0 {println!("number is divisible by 4"); } el…

Vue項目_項目配置腳本代碼詳細講解

Vue項目代碼詳細講解 1. jsconfig.json - JavaScript配置文件 {"compilerOptions": { // 編譯器選項配置"target": "es5", // 編譯目標&#xff1a;將代碼編譯為ES5版本&#xff0c;確保更好的瀏覽器兼容性"module": "esnext…

第一節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入門

Vben Admin vben5 系列文章目錄 &#x1f4bb; 基礎篇 ? 第一節&#xff1a;Vben Admin 最新 v5.0 (vben5) Python Flask 快速入門 ? 第二節&#xff1a;Vben Admin 最新 v5.0 (vben5) Python Flask 快速入門 - Python Flask 后端開發詳解(附源碼) ? 第三節&#xff1a;V…

Guava中常用的工具類

1. 集合工具類&#xff08;com.google.common.collect&#xff09;Guava 對 Java 集合框架進行了豐富擴展&#xff0c;解決了標準集合的諸多痛點。&#xff08;1&#xff09;Lists / Sets / Maps:用于簡化集合創建和操作&#xff1a;// 創建不可變集合&#xff08;線程安全&…

redission實現讀寫鎖的原理

Redisson 實現分布式讀寫鎖的核心原理是 ?基于 Redis 的 Lua 腳本原子操作? ?Pub/Sub 通知機制&#xff0c;在保證強一致性的同時實現高效的讀并發&#xff08;讀不阻塞讀&#xff0c;寫阻塞讀&#xff09;。以下是其核心設計&#xff1a;?一、核心數據結構?Redisson 使用…

【 ??SQL注入漏洞靶場】第二關文件讀寫

SQLi-Labs?它是一個開源的、專門為學習 ??Web安全?? 和 ??SQL注入技術?? 而設計的靶場項目。開發者故意在代碼中留下了各種不同類型的SQL注入漏洞&#xff0c;讓安全研究人員、學生和愛好者可以在一個合法、安全的環境中進行實戰練習&#xff0c;從而掌握發現和利用SQ…

設計藝術~緩存結構設計

背景 面對高QPS場景的業務&#xff0c;不得不考慮對一些數據做緩存設計&#xff0c;常見的緩存設計有這些&#xff1a;DB Proxy緩存、分布式緩存、Localcache緩存。 在考慮加緩存的背景下不考慮數據的一致性&#xff0c;都是瞎扯&#xff0c;所以我們再定義一下數據的一致性場景…

后端開發技術棧

后端開發技術棧核心技術內容平臺 (Content Platform)電商 (E-Commerce)金融科技 (FinTech) / 支付物聯網 (IoT - Internet of Things)游戲后端 (Game Backend)社交平臺搜索平臺企業級應用開發音視頻處理后端地圖與地理位置服務DevOps大數據開發大模型應用開發智能合約開發核心技…

【ICCV2025】計算機視覺|即插即用|ESC:顛覆Transformer!超強平替,ESC模塊性能炸裂!

論文地址&#xff1a;https://arxiv.org/pdf/2503.06671 代碼地址&#xff1a;https://github.com/dslisleedh/ESC 關注UP CV縫合怪&#xff0c;分享最計算機視覺新即插即用模塊&#xff0c;并提供配套的論文資料與代碼。 https://space.bilibili.com/473764881 摘要 本研究…

【面試場景題】如何進行高并發系統的性能測試?

文章目錄一、明確測試目標與指標二、測試環境搭建三、測試工具選型四、測試場景設計五、執行測試與監控六、瓶頸分析與調優七、測試報告與迭代總結高并發系統的性能測試是驗證系統在極限流量下是否能保持穩定運行的關鍵環節&#xff0c;需要結合場景設計、工具選型、指標監控、…

攻防世界ReverseMe-120

這道題比較經典&#xff0c;涉及三個知識點&#xff0c;所以記錄一下。首先給了一個文件&#xff0c;detect it easy看了下&#xff0c;是32位exe。放入ida中&#xff0c;找下main函數&#xff0c;F5反編譯看一下偽代碼。int __cdecl main(int argc, const char **argv, const …