正則表達式入門指南:從零開始學 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)、命名捕獲群組等進階功能。持續練習是最好的學習方式。
相關工具推薦
- 正則表達式測試器:即時測試和驗證正則表達式
- 文字比對工具:比較兩段文字的差異
- URL 編碼/解碼器:處理 URL 中的特殊字元
- JSON 格式化工具:格式化和驗證 JSON 數據
立即使用我們的免費正則測試器,邊學邊練,快速掌握正則表達式!