命名空間與核心類別
using System.Text.RegularExpressions;
// 核心類別:Regex, Match, MatchCollection, Group, Capture
靜態方法快速上手
| 方法 | 用途 | 範例 |
Regex.IsMatch | 布林判斷 | Regex.IsMatch(input, @"^\d+$") |
Regex.Match | 第一個符合 | Match m = Regex.Match(s, @"\d+"); |
Regex.Matches | 所有符合 | foreach (Match m in Regex.Matches(s, @"\d+")) |
Regex.Replace | 替換 | Regex.Replace(s, @"\s+", " ") |
Regex.Split | 分割 | Regex.Split(s, @"\s*,\s*") |
Regex.Escape | 轉義元字元 | Regex.Escape("(test)") → \(test\) |
實例化 Regex 物件 (效能較佳)
var regex = new Regex(@"\b\w{5,}\b", RegexOptions.Compiled | RegexOptions.IgnoreCase);
foreach (Match m in regex.Matches(text)) { ... }
Match / Group / Capture 階層結構
Match m = regex.Match("abracadabra", @"(a|b|r)+");
if (m.Success)
{
Console.WriteLine(m.Value); // "abra" (整個匹配)
Console.WriteLine(m.Index); // 0
Console.WriteLine(m.Length); // 4
Console.WriteLine(m.Groups.Count); // 2 (Group 0 = 整個匹配, Group 1 = 第一個捕獲組)
Console.WriteLine(m.Groups[1].Value); // "abra"
}
進階替換:MatchEvaluator
string result = Regex.Replace("a1b2c3", @"\d", m => (int.Parse(m.Value) * 2).ToString());
// "a2b4c6"
常用正則模式速查
| 需求 | 模式 | 說明 |
| Email | ^[\w.-]+@[\w.-]+\.\w+$ | 簡易版 |
| 手機 (台灣) | ^09\d{8}$ | 09 開頭 10 碼 |
| 身分證字號 | ^[A-Z][12]\d{8}$ | 首字母 + 1/2 + 8 碼 |
| IPv4 | ^((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$ | 嚴格驗證 |
| 中文字 | [\u4e00-\u9fa5] | 基本漢字區 |
| 去除 HTML 標籤 | <[^>]*> | 貪婪匹配 |
| 去除前後空白 | ^\s+|\s+$ | 配合 Replace |
效能與最佳實踐
- 重複使用 → **實例化 Regex + Compiled 選項**
- 避免災難性回溯:慎用
(.*)、(.+) 巢狀,改用 [^"]* 等否定字元組
- 大量文字處理 →
Regex.Split / Match.NextMatch() 避免一次建立巨大集合
- 單行模式
RegexOptions.Singleline 讓 . 匹配換行
結語
System.Text.RegularExpressions 提供 Perl 5 相容、功能強大的正則引擎。掌握靜態方法、實例化選項、Group 捕獲、MatchEvaluator 替換,即能解決 95% 文字處理需求。