?? 個人主頁:(時光煮雨)
?? 高質量專欄: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)允許我們將多個字符視為一個整體單元,就像數學中的括號一樣。分組主要有兩個作用:
- 將多個字符作為一個整體:可以對這個整體應用量詞(如 *、+、?、{n})
- 捕獲匹配的內容:可以在后續引用或提取這部分匹配的內容
??一、基本語法
使用圓括號 () 來創建分組:
(表達式)
例如,(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