正規表達式在你看懂各部件之前像亂碼,一旦通了,它就是你最好用的工具之一。這是一份新手也記得住的速查表。
字元類別
.—— 任意字元(換行除外,除非設s旗標)。\d—— 數字;\D—— 非數字。\w—— 單字字元(字母、數字、底線);\W—— 相反。\s—— 空白;\S—— 非空白。[abc]—— a、b、c 其中之一。[a-z]—— 範圍。[^abc]—— 除了 a、b、c 以外。
量詞(數量)
*—— 零或多個。+—— 一或多個。?—— 零或一個(可選)。{3}—— 剛好 3 個。{2,4}—— 2 到 4 個。{2,}—— 2 個以上。- 在量詞後加
?變成惰性(盡量少配):.+?。
錨點與邊界
^—— 字串開頭(設m時為每行開頭)。$—— 結尾。\b—— 單字邊界 —— 很適合整字比對,如\bcat\b。
群組與交替
( … )—— 擷取群組;比對到的文字會記成第 1、2⋯ 群組。(?: … )—— 不擷取的群組(只用於結構)。a|b—— 配 a 或 b。
旗標
g—— 找出所有比對,而非只有第一個。i—— 忽略大小寫。m——^與$依每行比對。s—— 讓.也配換行。
幾個實用範式
- 只有數字:
^\d+$ - 簡單日期:
\d{4}-\d{2}-\d{2} - 單字:
\b\w+\b - 粗略的 email:
[^@\s]+@[^@\s]+\.[^@\s]+
(真正的 email 驗證出了名地難 —— 這種粗略樣式用於快速檢查沒問題,但不適合做到完全符合 RFC。)
省下大把時間的技巧
- 逐步建構。 先寫一小段再加上去,邊看比對即時更新。
- 跳脫特殊字元,若你要它的字面意義:
\.、\?、\(。 - 小心貪婪的
.*—— 它會盡量抓;過頭時改用.*?或更精確的類別。 - 用真實資料測試,包括你預期會失敗的邊界情況。
學最快的方法是邊打邊看比對反白。在免費的正規表達式測試器即時試 —— 它會反白每個比對並列出擷取群組,全程在你的瀏覽器。