正則表達式入門指南:從零開始學 Regex|線上正則測試器教學

完整的正則表達式(Regex)入門教學,從基礎語法到實用範例,搭配線上測試器即時驗證。涵蓋字元匹配、量詞、分組、斷言等核心概念,適合程式開發者和數據分析師。

本文介紹的工具:正則表達式測試器

什麼是正則表達式(Regular Expression)?

正則表達式(Regular Expression,簡稱 Regex 或 RegExp)是一種用於描述文字模式的特殊語法。它就像是一種「搜尋語言」,讓您能夠用簡潔的表達式來匹配、搜尋、替換複雜的文字模式。

正則表達式被廣泛應用於程式開發、數據處理、文字編輯等領域。幾乎所有主流程式語言(JavaScript、Python、Java、C# 等)都內建了正則表達式的支援。

為什麼要學正則表達式?

  • 表單驗證:驗證 Email、電話號碼、身分證號等格式
  • 數據提取:從大量文字中提取特定資訊
  • 搜尋替換:進行複雜的文字搜尋和批量替換
  • 日誌分析:從伺服器日誌中提取關鍵資訊
  • 網頁爬蟲:解析 HTML 內容,提取所需數據

基礎語法:字元匹配

普通字元

最簡單的正則表達式就是普通字元,它會精確匹配對應的文字。例如,正則 hello 會匹配字串中的 "hello"。

特殊字元(元字元)

正則表達式中有一些具有特殊含義的字元:

元字元 含義 範例 匹配結果
. 匹配任意單個字元(換行符除外) a.c abc, a1c, a-c
\d 匹配任意數字(0-9) \d{3} 123, 456, 789
\w 匹配字母、數字或底線 \w+ hello, test_123
\s 匹配空白字元(空格、Tab 等) a\sb a b
\D 匹配非數字字元 \D+ abc, hello
\W 匹配非字母數字字元 \W @, #, !
\S 匹配非空白字元 \S+ hello, 123

您可以使用我們的正則表達式測試器即時驗證這些語法。


量詞:控制匹配次數

量詞用於指定前面的元素應該匹配多少次:

量詞 含義 範例 匹配結果
* 匹配 0 次或多次 ab*c ac, abc, abbc
+ 匹配 1 次或多次 ab+c abc, abbc(不匹配 ac)
? 匹配 0 次或 1 次 colou?r color, colour
{n} 精確匹配 n 次 \d{4} 2024, 1234
{n,} 匹配至少 n 次 \d{2,} 12, 123, 1234
{n,m} 匹配 n 到 m 次 \d{2,4} 12, 123, 1234

貪婪匹配 vs 懶惰匹配

預設情況下,量詞是「貪婪」的,會盡可能多地匹配字元。在量詞後加上 ? 可以變成「懶惰」匹配,盡可能少地匹配。

例如,對於字串 <div>hello</div>

  • 貪婪匹配 <.*> → 匹配整個 <div>hello</div>
  • 懶惰匹配 <.*?> → 匹配 <div></div>

字元類別:匹配特定字元集

使用方括號 [] 可以定義一組可匹配的字元:

語法 含義 範例
[abc] 匹配 a、b 或 c [aeiou] 匹配母音
[a-z] 匹配 a 到 z 的任意字元 小寫字母
[A-Z] 匹配 A 到 Z 的任意字元 大寫字母
[0-9] 匹配 0 到 9 的任意數字 等同於 \d
[^abc] 匹配除了 a、b、c 以外的字元 否定字元類

錨點:定位匹配位置

錨點不匹配字元,而是匹配位置:

錨點 含義 範例 說明
^ 匹配字串開頭 ^Hello 匹配以 Hello 開頭的字串
$ 匹配字串結尾 world$ 匹配以 world 結尾的字串
\b 匹配單詞邊界 \bcat\b 匹配獨立的 cat,不匹配 category

分組與捕獲

使用圓括號 () 可以將多個元素組成一個群組:

基本分組(abc)+ 匹配一個或多個 "abc" 序列。

捕獲群組:圓括號不僅用於分組,還會「捕獲」匹配的內容,可以在後續引用。例如 (\d{4})-(\d{2})-(\d{2}) 可以分別捕獲年、月、日。

非捕獲群組:如果只需要分組而不需要捕獲,可以使用 (?:...)

在我們的正則測試器中,您可以清楚地看到每個捕獲群組匹配的內容。


實用正則表達式範例

以下是一些常用的正則表達式範例,您可以直接在我們的正則測試器中測試:

Email 驗證

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

這個正則可以驗證基本的 Email 格式,包含用戶名、@ 符號、域名和頂級域名。

台灣手機號碼

^09\d{8}$

匹配台灣手機號碼格式:09 開頭,後接 8 位數字。

URL 匹配

https?:\/\/[\w\-]+(\.[\w\-]+)+[\/\w\-._~:?#[\]@!
amp;'()*+,;=]*

匹配 HTTP 和 HTTPS 網址。

台灣身分證號碼

^[A-Z][12]\d{8}$

匹配台灣身分證號碼格式:一個大寫英文字母 + 1 或 2 + 8 位數字。

IPv4 地址

^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$

精確匹配 IPv4 地址,每個數字段在 0-255 之間。


常見問題(FAQ)

正則表達式在不同程式語言中是否相同?

基本語法大致相同,但不同語言可能有一些差異。例如,JavaScript 使用 /pattern/flags 語法,Python 使用 re 模組。我們的測試器使用 JavaScript 正則引擎。

如何除錯複雜的正則表達式?

建議使用我們的正則測試器,它提供即時匹配高亮和分組捕獲顯示,幫助您逐步驗證和除錯正則表達式。

正則表達式有效能問題嗎?

是的,不當的正則表達式可能導致「災難性回溯」(Catastrophic Backtracking),嚴重影響效能。避免使用巢狀量詞(如 (a+)+),並盡量使用具體的字元類別而非通配符。

如何學習更進階的正則表達式?

掌握基礎後,可以進一步學習前瞻斷言(Lookahead)、後顧斷言(Lookbehind)、命名捕獲群組等進階功能。持續練習是最好的學習方式。


相關工具推薦

立即使用我們的免費正則測試器,邊學邊練,快速掌握正則表達式!