首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

正則表達式完整入門:概念、歷史、分類與應用場景

     編輯:更多程式設計知識

前言

正則表達式 是用特定模式匹配字串的強大工具,廣泛應用於驗證、搜尋、替換、擷取等字串處理場景。本文從定義、起源、分類、引擎機制到實際應用全方位介紹。

什麼是正則表達式

多重定義視角:

  • 模式匹配公式:用某種模式描述一類字串
  • 字串匹配模板:由一般字元與中繼字元組成的文字模式
  • 規則描述代碼:記錄文本規則,用於查找/替換/擷取
  • 特徵驗證器:用一個「字串」描述特徵,驗證另一個「字串」是否符合

歷史起源

  1. 1943:McCulloch & Pitts 以數學描述神經網路
  2. 1956:Stephen Kleene 發表「神經網路事件表示法」,引入「正則表達式」術語,定義為「正則集的代數表達式」
  3. 1968:Ken Thompson 將正則表達式引入 QED 編輯器,後移植至 Unix ed、grep
  4. 現代:Perl、PCRE、Java、.NET、JavaScript 等廣泛支援

正則表達式與萬用字元比較

特性萬用字元正則表達式
語法* ?豐富的中繼字元:. * + ? [] () | ^ $ 等
精確度低(只能簡單匹配)高(可描述複雜結構)
範例*.doc\w+\.docx?$

引擎機制:NFA vs DFA

  • NFA(非確定性有限自動機):Perl、PCRE、Java、.NET、JavaScript 採用。同一字串可產生多種理解,**可能回溯**,效率通常較低但功能強大(支援反向參考、環視等)
  • DFA(確定性有限自動機):lex、awk、GNU grep (不含 -P) 採用。唯一理解路徑,**無回溯**,匹配速度快但功能受限

實務啟示:撰寫正則時盡量減少回溯(避免嵌套量詞、善用佔有優先量詞 ++ *+、具體化字元類別)以提升效能。

匹配的三種語法角色

  1. 形容詞性:「這字串匹配該正則」
  2. 動詞性:「在文本中匹配正則」
  3. 名詞性:「滿足正則的那一段子字串」(一個 match 物件)

四大核心應用場景

應用說明典型範例
驗證檢查字串是否符合格式Email、URL、身分證號、手機號、密碼強度
查找從文本找出符合模式的片段日誌分析、關鍵字提取、程式碼搜尋
替換將匹配部分替換為新字串敏感詞過濾、格式統一、模板渲染
擷取取出匹配的子字串供後續使用網頁爬蟲、資料解析、分組捕獲

常見支援環境

  • 作業系統:Linux、Unix、HP-UX、Windows (PowerShell)
  • 程式語言:C#、PHP、Java、Python、JavaScript、Go、Rust、C++11 <regex>
  • 工具軟體:VS Code、Notepad++、grep、sed、awk、EditPlus、UltraEdit

入門建議

  1. 先掌握核心中繼字元:. * + ? ^ $ [] () | \
  2. 理解貪婪/非貪婪/佔有優先量詞差異
  3. 善用線上測試工具:Regex101、RegExr、Debuggex
  4. 實戰練習:從簡單驗證開始,逐步挑戰複雜解析
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved