System.Text.RegularExpressions.RegexOptions 定義了正則引擎的匹配行為,常用成員如下:
| 選項 | 效果 | 預設行為 |
|---|---|---|
None | 無特殊選項 | 區分大小寫、左向右、^$ 僅匹配字串首尾、. 不匹配換行 |
IgnoreCase | 忽略大小寫 | 區分大小寫 |
RightToLeft | 從右向左掃描 | 左向右 |
Multiline | ^/$ 匹配每行首尾 | 僅匹配整字串首尾 |
Singleline | . 匹配任意字元 (含換行) | 不匹配換行 |
Compiled | 編譯為 IL 提升效能 | 解釋執行 |
ExplicitCapture | 僅捕獲具名群組 | 捕獲所有括號群組 |
IgnorePatternWhitespace | 忽略模式中的空白並允許註解 | 空白為字面意義 |
string input = "Abcccccc";
var reg1 = new Regex("abc"); // false
var reg2 = new Regex("abc", RegexOptions.IgnoreCase); // true
Console.WriteLine(reg1.IsMatch(input));
Console.WriteLine(reg2.IsMatch(input));
string input = "vvv123===456vvv";
var regL = new Regex(@"\d+"); // 匹配 "123"
var regR = new Regex(@"\d+", RegexOptions.RightToLeft); // 匹配 "456"
Console.WriteLine(regL.Match(input).Value);
Console.WriteLine(regR.Match(input).Value);
var sb = new StringBuilder();
sb.AppendLine("A bbbb A");
sb.AppendLine("C bbbb C");
string pattern = @"^\w"; // 每行首字元
// 未加 Multiline:只匹配整個字串第一個 'A'
// 加上 Multiline:匹配 'A' 和 'C'
var matches = Regex.Matches(sb.ToString(), pattern, RegexOptions.Multiline);
foreach (Match m in matches) Console.WriteLine($"結果:{m.Value}");
RegexOptions 以 [Flags] 屬性標記,可使用 | 運算子組合:
// 同時忽略大小寫 + 多行模式
var combined = RegexOptions.IgnoreCase | RegexOptions.Multiline;
var matches = Regex.Matches(input, pattern, combined);
// 建構函式同樣支援
var regex = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
| 場景 | 推薦組合 | 說明 |
|---|---|---|
| 日誌/代碼多行搜尋 | Multiline | IgnoreCase | ^/$ 按行匹配,關鍵字不分大小寫 |
| HTML/JSON 整块匹配 | Singleline | IgnoreCase | . 能跨行匹配標籤內容 |
| 高效能靜態模式 | Compiled | IgnoreCase | 首次較慢,後續執行極快,適合重複使用 |
| 從尾部提取最後數字 | RightToLeft | 避免貪婪匹配前段數字 |
| 可讀性優先的複雜模式 | IgnorePatternWhitespace | IgnoreCase | 模式中可寫註解、換行,如 # 註解 |
Multiline 與 Singleline 可同時啟用:^$ 按行、. 匹配換行。Compiled 增加啟動開銷,僅對重複使用的靜態 Regex 有益;動態模式勿用。RightToLeft 僅影響掃描方向,^$ 語意不變 (仍為字串/行首尾)。