首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# RegexOptions 組合技巧:IgnoreCase、Multiline、RightToLeft 位元運算實戰

     編輯:關於C語言

RegexOptions 列舉速覽

System.Text.RegularExpressions.RegexOptions 定義了正則引擎的匹配行為,常用成員如下:

選項效果預設行為
None無特殊選項區分大小寫、左向右、^$ 僅匹配字串首尾、. 不匹配換行
IgnoreCase忽略大小寫區分大小寫
RightToLeft從右向左掃描左向右
Multiline^/$ 匹配每行首尾僅匹配整字串首尾
Singleline. 匹配任意字元 (含換行)不匹配換行
Compiled編譯為 IL 提升效能解釋執行
ExplicitCapture僅捕獲具名群組捕獲所有括號群組
IgnorePatternWhitespace忽略模式中的空白並允許註解空白為字面意義

單一選項示範

IgnoreCase:大小寫不敏感

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));

RightToLeft:反向匹配

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);

Multiline:多行模式下 ^$ 換行匹配

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}");

核心技巧:位元 OR (|) 組合多選項

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 僅影響掃描方向,^$ 語意不變 (仍為字串/行首尾)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved