初學者正則表達式入門:如何撰寫正則表達式
初學者正則表達式入門
正則表達式(Regular Expressions — regex)是描述文字的模式。透過正則表達式,你可以搜尋字串、驗證輸入、提取資料,並使用單一簡潔的表達式執行複雜的尋找與取代。一旦你掌握了基礎知識,正則表達式將成為你程式設計工具箱中最強大的工具之一。
什麼是正則表達式?
正則表達式是一串定義搜尋模式的字元。模式 \d{3}-\d{2}-\d{4} 可以匹配美國社會安全號碼:三位數字、連字號、兩位數字、連字號、四位數字。
正則表達式引擎存在於幾乎所有程式語言中 — JavaScript、Python、Java、Ruby、Go — 全部都有內建支援。
字面字元
大多數字元會匹配其自身。模式 cat 會匹配出現的任意位置的文字字串 "cat"。
Pattern: cat
Matches: "cat" in "The cat sat on the mat."
Matches: "cat" in "catalog"
字面匹配簡單直接但功能有限。真正的威力來自於中繼字元(metacharacters)。
中繼字元(Metacharacters)
這些字元具有特殊含義,若要匹配其字面值,必須使用 \ 進行跳脫:
. ^ $ * + ? { } [ ] \ | ( )
字元類(Character Classes)
字元類可以匹配集合中的一個字元。
方括號表示法
| 模式 | 匹配 |
|------|------|
| [aeiou] | 任何母音 |
| [0-9] | 任何數字 |
| [a-zA-Z] | 任何字母 |
| [^0-9] | 任何非數字字元 |
預定義類
| 簡寫 | 描述 |
|------|------|
| \d | 任何數字(等同於 [0-9]) |
| \w | 字母、數字或底線 |
| \s | 空格、tab、換行 |
| \D | 任何非數字字元 |
| \W | 任何非單詞字元 |
| \S | 任何非空白字元 |
| . | 除換行外的任何字元 |
量詞(Quantifiers)
量詞控制前一個元素必須出現多少次。
| 量詞 | 含義 | 範例 | 匹配 |
|------|------|------|------|
| * | 零次或多次 | a* | ""、"a"、"aa" |
| + | 一次或多次 | a+ | "a"、"aa"、"aaa" |
| ? | 零次或一次 | colou?r | "color"、"colour" |
| {3} | 恰好 N 次 | \d{3} | "123" |
| {2,4} | 介於 N 和 M 次 | \d{2,4} | "12"、"123"、"1234" |
範例
\d+ → "42" in "Answer is 42"
https?:// → "http://" and "https://"
錨點(Anchors)
錨點匹配位置,而非字元。
| 錨點 | 含義 |
|------|------|
| ^ | 字串開頭 |
| $ | 字串結尾 |
| \b | 單詞邊界 |
| \B | 非單詞邊界 |
^hello → matches "hello" only at the start
end$ → matches "end" only at the end
\bword\b → matches "word" as a whole word, not inside "sword"
分組與交替(Groups and Alternation)
捕獲分組 ( ) 提取匹配的部分:
(\d{3})-(\d{4}) → "555-1234", captures "555" in group 1, "1234" in group 2
非捕獲分組 (?: ) 僅分組但不提取:
(?:https?|ftp):// → "http://", "https://", "ftp://"
交替 | 充當 OR:
cat|dog|bird → matches "cat", "dog", or "bird"
實用正則表達式範例
| 使用場景 | 模式 |
|----------|------|
| 美國電話 | \d{3}-\d{3}-\d{4} |
| 電子郵件(簡單) | \S+@\S+\.\S+ |
| IP 位址 | \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} |
| 主題標籤 | #[a-zA-Z]\w* |
| 時間(HH:MM) | [01]\d|2[0-3]:[0-5]\d |
如何測試正則表達式模式
始終以互動方式測試模式:
- 輸入你的正則表達式模式。
- 輸入測試字串。
- 即時查看哪些部分匹配。
- 調整並重複。
使用正則表達式測試器工具來實驗模式。它會高亮顯示匹配項、顯示捕獲分組,並幫助你準確了解表達式中每個部分的作用。