正則表達式入門:一份實用的生存指南
· 8 分鐘閱讀
正則表達式看起來就像有人把鍵盤砸了一遍。但一旦你掌握了語法,它會成為開發者工具箱裡最實用的工具之一。
本文用真實例子帶你入門,不講廢話。
字元:基礎磚塊
正則由「匹配某個東西」的指令組成:
a— 字元 a\d— 任何數字(等同於[0-9])\w— 任何字母、數字或底線\s— 任何空白字元(空格、Tab、換行).— 任何字元(除了換行)
把它們組合起來,就有了像 \d\d\d 這種「匹配三個數字」的樣式。
數量:單個還不夠
光匹配單個字元沒什麼用,我們想匹配「一段」。
*— 0 次或多次+— 1 次或多次?— 0 次或 1 次{n}— 恰好 n 次{n,m}— n 到 m 次
例如 \d{3}-\d{4} 匹配 555-1234 這種電話號碼。
錨點:把樣式釘在位置上
^— 字串開頭$— 字串結尾\b— 單詞邊界
^Error: 匹配以 “Error:” 開頭的行 —— 在日誌裡撈錯時超好用。
實戰例子
驗證 Email(夠用版)
^[\w.+-]+@[\w-]+\.[\w.-]+$
不完美,但能擋掉 99% 的拼錯。
擷取 URL 中的網域
https?://([^/]+)
擷取群組 ([^/]+) 抓的就是網域。
把空白規範化成單個
\s+
替換為單個空格。
驗證 ISO 日期
^\d{4}-\d{2}-\d{2}$
只驗格式,不驗有效性(2026-13-99 也會通過)—— 那是另一篇文章的事。
旗標:開關
g— 全域匹配(不止第一個)i— 忽略大小寫m— 多行模式s— 點號也匹配換行
/error/gi 在整段文字中不分大小寫地找所有 “error”。
常見陷阱
- 貪婪 vs 懶惰 —
*預設貪婪。<.*>會吃掉整行;用<.*?>才會一個個匹配。 - 要跳脫 —
.、(、[這些特殊字元要寫成\.、\(、\[ - 正則不擅長解析 HTML — 別試。等真要做時用專門的解析器。
練習場
讀正則最好的方式不是看教學,而是在自己的程式碼裡用它。從一行日誌解析開始,下一個專案中你會自然而然地寫出更複雜的樣式。
如果想線上練習,試試我們的 正則測試工具 —— 即時高亮匹配 + 擷取群組視覺化。