模式:(abra(cad)?)+ — 外層群組 1 匹配 abra 後可選接 cad,整體重複一次以上。
輸入:abracadabra1abracadabra2abracadabra3
執行結果關鍵觀察:
abra(最後一次重複匹配),但 CaptureCollection 含兩個捕獲:abracad(索引 0, 長度 7)、abra(索引 7, 長度 4)cad)最後值 cad,單一捕獲Group.ToString() 回傳最後一次捕獲值;若需所有重複捕獲,必須遍歷 CaptureCollection。
| 範式 | 特點 | 適用場景 |
|---|---|---|
| 基於流程 | 用 foreach 迭代 Regex.Matches,在 C# 程式碼中處理每個匹配 | 邏輯複雜、需呼叫外部 API、多步驟轉換 |
| 基於運算式 | 用 Regex.Replace(pattern, evaluator) 或單一複雜模式完成 | 純文字轉換、效能敏感、邏輯可宣告式表達 |
最佳實務:兩者結合 — 以 Regex 引擎完成結構匹配,複雜業務邏輯在 Evaluator 或迴圈中處理。
string text = "the quick red fox jumped over the lazy brown dog.";
string pattern = @"\w+|\W+"; // 單字或非單字
string result = "";
foreach (Match m in Regex.Matches(text, pattern)) {
string x = m.Value;
if (char.IsLower(x[0])) x = char.ToUpper(x[0]) + x.Substring(1);
result += x;
}
// 結果:"The Quick Red Fox Jumped Over The Lazy Brown Dog."