1. 正規表達式簡介
正規表達式(Regular Expression,簡稱 Regex)是一種用於字串匹配與處理的強大工具。它廣泛應用於文字搜尋、資料驗證、文字替換等場景。正規表達式透過特殊的語法模式來描述字串結構,並可被多種程式語言支援,如 Python、JavaScript、Java、C# 等。
2. 基本語法與範例
2.1 字面量匹配
正規表達式最基本的形式是字面量匹配,意即直接搜尋特定字串。
範例:
hello |
可匹配「hello」這個字串。
2.2 字元類別(Character Classes)
字元類別用來匹配特定類型的字元。
| 語法 | 說明 | 範例 |
|---|---|---|
. |
任意單一字元(不含換行) | h.t 可匹配 hat, hot, hit |
[abc] |
任意列出的字元 | [aeiou] 可匹配任一母音字母 |
[^abc] |
不包含列出的字元 | [^0-9] 可匹配任何非數字字元 |
[a-z] |
字母範圍 | [a-zA-Z] 可匹配所有英文字母 |
\d |
任意數字(等價於 [0-9]) |
\d{2} 可匹配 23, 89 |
\w |
任意字母、數字或底線([a-zA-Z0-9_]) |
\w+ 可匹配 hello_123 |
\s |
空白字元(空格、Tab、換行) | \s+ 可匹配 |
2.3 邊界匹配(Anchors)
用來限制匹配的位置。
| 語法 | 說明 | 範例 |
|---|---|---|
^ |
開頭 | ^Hello 只能匹配 Hello world,但不匹配 Say Hello |
$ |
結尾 | world$ 只能匹配 Hello world,但不匹配 world today |
\b |
單字邊界 | \bcat\b 只匹配 cat,但不匹配 catch |
2.4 重複匹配(Quantifiers)
用來指定重複次數。
| 語法 | 說明 | 範例 |
|---|---|---|
* |
0 次或更多 | ba* 可匹配 b, ba, baa, baaa |
+ |
1 次或更多 | ba+ 可匹配 ba, baa, baaa 但不匹配 b |
? |
0 次或 1 次 | colou?r 可匹配 color 和 colour |
{n} |
恰好 n 次 | a{3} 只匹配 aaa |
{n,} |
至少 n 次 | a{2,} 可匹配 aa, aaa, aaaa |
{n,m} |
n 到 m 次 | a{2,4} 可匹配 aa, aaa, aaaa |
2.5 分組與選擇(Groups & Alternation)
使用括號來分組,使用 | 來表示選擇。
範例:
(grape|apple|banana) |
匹配 grape、apple 或 banana。
範例(分組):
(a|b)c |
匹配 ac 或 bc。
2.6 轉義字元(Escape Characters)
正規表達式中的特殊字元(如 .、*、?)需要用 \ 進行轉義。
範例:
\.com |
匹配 .com(實際字面值)。
3. 正規表達式應用範例
3.1 Email 驗證
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ |
匹配範例:
test@example.com✅hello@domain.co.uk✅invalid@com❌
3.2 手機號碼驗證(台灣格式)
^09[0-9]{8}$ |
匹配範例:
0912345678✅1234567890❌
3.3 找出所有網址
https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/\S*)? |
匹配範例:
https://www.google.com✅http://example.org/test✅ftp://invalid.url❌
3.4 HTML 標籤匹配
<([a-z]+)([^<]+)*(?:>(.*?)</\1>|/>) |
匹配範例:
<div class="container">Content</div>✅<img src="image.jpg" />✅
4. 總結
正規表達式是一種強大的工具,適用於文字處理與資料驗證。透過學習基本語法與實際應用,你可以更有效率地處理字串相關的問題。實務上建議透過線上工具(如 Regex101 等工具)來測試你的正規表達式,以加深理解。