正則表達式是處理字符串匹配、提取、替換的強大工具。C# 通過 System.Text.RegularExpressions 命名空間提供完整支持。本文介紹核心語法:元字符、轉義字符、限定符(量詞),助你快速上手。
元字符具有特殊含義,是正則表達式的基礎構建塊:
| 元字符 | 說明 | 示例 |
|---|---|---|
. | 匹配除換行符 \n 以外的任意單字符 | a.c 匹配 "abc", "aXc" |
\d | 匹配數字字符,等價於 [0-9] | \d{3} 匹配三位數字 |
\D | 匹配非數字字符,等價於 [^0-9] | |
\w | 匹配字母、數字、下劃線,等價於 [a-zA-Z0-9_] | \w+ 匹配單詞 |
\W | 匹配非單詞字符 | |
\s | 匹配任意空白字符(空格、制表符 \t、換行 \n 等) | \s+ 匹配多個空格 |
\S | 匹配非空白字符 | |
^ | 匹配字符串開始位置(多行模式下匹配行首) | ^Hello |
$ | 匹配字符串結束位置(多行模式下匹配行尾) | World$ |
\b | 匹配單詞邊界(字母數字與非字母數字之間) | \bword\b |
\B | 匹配非單詞邊界 |


若需匹配元字符本身(如 .、*、?、\ 等),必須使用反斜杠 \ 轉義:
\. 匹配字面點號 .\* 匹配字面星號 *\\ 匹配字面反斜杠 \在 C# 字符串中,反斜杠本身需轉義,建議使用 逐字字符串(@"")避免雙重轉義:
// 普通字符串:雙重轉義
string pattern1 = "\\d+\\.\\d+";
// 逐字字符串:更直觀
string pattern2 = @"\d+\.\d+"; // 匹配 "123.45" 格式數字

限定符指定前導字符/組出現的次數:
| 限定符 | 說明 | 等價形式 | 示例 |
|---|---|---|---|
* | 零次或多次(貪婪) | {0,} | ab*c 匹配 "ac", "abc", "abbc" |
+ | 一次或多次(貪婪) | {1,} | \d+ 匹配至少一位數字 |
? | 零次或一次(可選) | {0,1} | colou?r 匹配 "color" 或 "colour" |
{n} | 恰好 n 次 | \d{3} 匹配三位數字 | |
{n,} | 至少 n 次 | \d{2,} 匹配至少兩位數字 | |
{n,m} | n 到 m 次 | \d{3,5} 匹配 3-5 位數字 |

默認限定符為貪婪模式,盡可能多匹配;在限定符後加 ? 啟用非貪婪模式,盡可能少匹配:
string input = "<div>Content</div><span>More</span>";
// 貪婪:匹配從第一個 < 到最後一個 >
Regex greedy = new Regex(@"<.+>");
// 結果: "<div>Content</div><span>More</span>"
// 非貪婪:匹配單個標籤
Regex lazy = new Regex(@"<.+?>");
// 結果: "<div>", "</div>", "<span>", "</span>"
Regex.IsMatch(input, pattern):判斷是否匹配Regex.Match(input, pattern):獲取首個匹配 Match 對象Regex.Matches(input, pattern):獲取所有匹配 MatchCollectionRegex.Replace(input, pattern, replacement):替換匹配內容Regex.Split(input, pattern):按正則分割字符串string emailPattern = @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$";
string[] testEmails = { "user@example.com", "invalid@.com", "name@domain.co.uk" };
foreach (var email in testEmails) {
bool isValid = Regex.IsMatch(email, emailPattern);
Console.WriteLine($"{email}: {(isValid ? "有效" : "無效")}");
}
掌握以上核心語法,配合 C# Regex 類的豐富 API,即可應對大多數文本處理場景。進階學習可深入分組捕獲、零寬斷言、RegexOptions 選項等特性。