Regex教學:3分鐘快速了解正規表達式是什麼

regex

正規表達式(Regular Expression),簡稱Regex,是一種強大的文本處理工具,用於匹配、搜索、替換和解析文本。無論是數據分析、網頁爬蟲還是日常的程式開發工作,正規表達式都扮演著不可或缺的角色。本文將帶你快速了解Regex的基本概念和使用方法。

Regex的基本概念

正規表達式是由字符和特殊符號組成的字符串,用於描述或匹配一系列符合某個句法規則的字符串。它基於一套標準的語法規則,通過簡潔的方式實現複雜的文本匹配邏輯。

使用Regex的常見情境

1. 資料驗證

在使用者輸入驗證中,Regex用來確保輸入資料符合特定格式。這包括電子郵件地址、電話號碼、身分證號等的格式校驗。

2. 文字搜尋和替換

在大型文件或程式庫中,Regex可以快速找到符合特定模式的文字串。此外,它也可以用來替換文字中的某些部分,這在程式撰寫和文件編輯中非常實用。

3. 資料清理

在資料預處理階段,Regex常用於從原始資料中提取有用資訊,或者刪除不需要的資料。例如,從日誌檔中提取特定的錯誤資訊,或從文字中移除HTML標籤。

4. 自然語言處理(NLP)

在處理自然語言資料時,Regex用於分句、分詞、刪除停用詞等任務。它可以幫助處理和準備文字資料,以進行進一步的語言分析或機器學習任務。

5. 網頁爬蟲

在網頁爬蟲開發中,Regex用於從HTML或其他網頁格式中提取特定資訊,如連結、圖片位址、文字等。

6. 日誌分析

在系統管理和安全分析中,Regex用於從日誌檔中提取特定事件或錯誤資訊,幫助分析系統運行狀態或識別安全威脅。

7. 程式和腳本

在程式和腳本開發中,Regex用於解析和處理配置檔、程式重構、檢查程式規範等。

8. 檔案重命名

在批次處理檔案時,Regex可以用來構建複雜的重命名規則,快速整理和管理大量檔案。

Regex的基本元素

1. 字元匹配

  • .:匹配任何單個字元(除了換行符\n)。
  • \d:匹配任何數字,等同於[0-9]
  • \D:匹配任何非數字字元,等同於[^0-9]
  • \w:匹配任何字母數字字元,包括底線,等同於[A-Za-z0-9_]
  • \W:匹配任何非字母數字字元。
  • \s:匹配任何空白字元(包括空格、製表符、換行符等)。
  • \S:匹配任何非空白字元。

2. 量詞

  • *:匹配前面的字元0次或多次。
  • +:匹配前面的字元1次或多次。
  • ?:匹配前面的字元0次或1次。
  • {n}:匹配前面的字元恰好n次。
  • {n,}:匹配前面的字元至少n次。
  • {n,m}:匹配前面的字元至少n次,但不超過m次。

3. 位置匹配

  • ^:匹配輸入字串的開始位置。
  • $:匹配輸入字串的結束位置。
  • \b:匹配一個字詞邊界。
  • \B:匹配非字詞邊界。

4. 字元集

  • [abc]:匹配任何一個列在方括號中的字元(此例中為”a”、”b”或”c”)。
  • [^abc]:匹配任何不在方括號中的字元。

5. 分組和引用

  • (abc):匹配並捕獲括號內的表達式(此例中為”abc”)。
  • (?:abc):匹配括號內的表達式但不捕獲匹配的字串。
  • \1:引用第一個捕獲組的匹配內容。

6. 或運算

  • |:匹配左側或右側的表達式。

Regex的應用範例

範例1:驗證電子郵件地址

假設我們需要確認一個字符串是否為有效的電子郵件地址,我們可以使用以下正規表達式:

regexCopy code

^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$

  • ^ 表示匹配開始。
  • \w+ 匹配一個或多個字母、數字或底線。
  • ([\.-]?\w+)* 匹配0個或多個由點或連字符後跟一個或多個字母、數字或底線組成的序列。
  • @ 是字面量字符,匹配”@”。
  • \w+([\.-]?\w+)* 匹配域名部分。
  • (\.\w{2,3})+$ 匹配一個點後跟2到3個字母的頂級域名。

範例2:提取日期

如果我們有一串文本,需要從中提取出所有符合特定格式的日期(例如,YYYY-MM-DD),我們可以使用以下正規表達式:

regexCopy code

\b\d{4}-\d{2}-\d{2}\b

  • \b 表示單詞邊界。
  • \d{4} 匹配4位數字(年份)。
  • - 是字面量字符,匹配”-“。
  • \d{2} 匹配2位數字(月份和日期)。

範例3:密碼強度檢查

為了確保用戶設定的密碼至少包含8個字符,且包含大小寫字母、數字和特殊字符,我們可以使用以下正規表達式:

regexCopy code

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

  • ^$ 分別匹配字符串的開始和結束。
  • (?=.*[a-z]) 確保字符串中至少有一個小寫字母。
  • (?=.*[A-Z]) 確保至少有一個大寫字母。
  • (?=.*\d) 確保至少有一個數字。
  • (?=.*[@$!%*?&]) 確保至少有一個特殊字符。

透過這些範例,我們可以看到正規表達式如何在不同場景下提供強大的文本匹配和處理能力。掌握正規表達式不僅能夠幫助你更有效地處理文本數據,還能提升你的程式設計和數據分析技能。隨著練習和應用的深入,你將能夠解鎖正規表達式更多的潛力,將其應用到更廣泛的領域中。

學習Regex的建議

  1. 開始於基礎:先熟悉基本的元字符和語法規則。
  2. 實踐應用:通過練習解決實際問題來提升技能。
  3. 使用工具:利用線上Regex測試工具,如Regex101,進行實時測試和調試。

結論

掌握正規表達式是提升程式開發和數據處理能力的重要一步。雖然Regex的學習曲線可能看起來陡峭,但一旦你熟悉了它的基本概念和應用,你將發現它是一個不可多得的強大工具。希望本文能幫助你快速入門Regex,開啟文本處理的新旅程。