本文整理自《C# 網絡應用編程基礎練習題與答案(七)》,針對正則表達式核心語法進行逐字拆解,並補充實戰常用模式與效能建議。
正則: `]+)""?>(.+)`
輸入: Example Site
Group 1 (URL): https://example.com
Group 2 (Text): Example Site
正則: `^([\w-]+\.)*?[\w-]+@[\w-]+\.([\w-]+\.)*?[\w]+$`
| 片段 | 含義 |
|---|---|
| `^` | 字串開頭錨點 |
| `([\w-]+\.)*?` | **非貪婪**匹配:`[\w-]+` (字母數字底線連字號至少一個) + `.` (點號),零或多次 (子域名如 `mail.` `sub.mail.`) |
| `[\w-]+` | 主機名/使用者名主體 (至少一個字元) |
| `@` | 字面 `@` 分隔符 |
| `[\w-]+\.` | 域名主體 + 點號 (如 `gmail.`) |
| `([\w-]+\.)*?` | 非貪婪匹配次級域名 (如 `co.` `com.`) |
| `[\w]+` | 頂級域名 (至少一個字母數字底線,如 `com` `cn` `io`) |
| `$` | 字串結尾錨點 |
匹配: user.name@sub.domain.com, user-name@domain.co.uk, a@b.c
不匹配: @domain.com, user@.com, user@domain, user@domain..com
| 需求 | 正則 | 說明 |
|---|---|---|
| 1) 4-8 英文字母 | `^[a-zA-Z]{4,8}$` | `{m,n}` 量詞限定長度 |
| 2) 不含字母,至少 1 字元 | `^[^a-zA-Z]+$` | `^` 否定字元類別,`+` 至少一個 |
| 3) 至少 3 位數字 | `^\d{3,}$` 或 `[0-9]{3,}` | `\d` = `[0-9]` |
| 4) 至少 3 字元 (任意) | `^.{3,}$` | `.` 匹配除換行外任意字元 |
| 5) 至少 3 英文字母 | `^[a-zA-Z]{3,}$` | |
| 6) 任意字元 (含空字串) | `^.*$` 或 `^.{0,}$` | `*` = `{0,}` |
| 7) 3 字母或數字 (如 123, r3a) | `^[A-Za-z0-9]{3}$` | 精確 3 字元 |
| 8) 3 個點號 | `^\.{3}$` | 點號需轉義 `\.` |
| 9) @ 前至少 1 字元,後至少 3 字元 | `^.+@.{3,}$` | 簡化版 Email 長度檢查 |
| 10) 必須包含左括號 | `\(` | 括號為特殊字元需轉義 |
正則表達式是**字串模式匹配的利器**,但**非萬能解析器**。掌握**字元類別、量詞、捕獲組、錨點、貪婪/非貪婪**核心語法,配合**預編譯、NonBacktracking、HtmlAgilityPack 解析 HTML** 等工程化手段,才能寫出高效、可維護、不踩坑的匹配邏輯。