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

正則表達式入門與 .NET Regex 類完整應用指南

     編輯:關於C++

正則表達式基礎速查

模式說明範例匹配
Mic*Mic 後接 0+ 個 'c'Mic, Micc, Miccc...
Mic+Mic 後接 1+ 個 'c'Micc, Miccc... (不含 Mic)
.任意單一字元a, 1, @, 中...
[a-zA-Z_0-9]字母、數字、底線a, Z, 5, _
\w等同 [a-zA-Z_0-9]同上
\w+至少一個單字字元identifier, var1
^...$行首/行尾錨點整行匹配
\d數字 [0-9]0~9
{n}重複 n 次
{m,n}重複 m~n 次
?0 或 1 次 (等同 {0,1})
(...)分組捕獲
\b單字邊界

經典範例解析

  • C 識別碼:^[a-zA-Z_]\w*$
  • MasterCard (16 碼, 5 開頭):^5\d{15}$
  • Visa (16 碼, 4/5 開頭):^[45]\d{15}$
  • 美國郵遞區號 (ZIP/ZIP+4):^\d{5}(-\d{4})?$

.NET Framework Regex 類架構

Regex
├── Match(string)           → Match (第一個匹配)
├── Matches(string)         → MatchCollection (所有匹配)
├── Replace(input, repl)    → string (替換)
├── Split(string)           → string[] (分割)
└── 靜態方法:Regex.Match/Replace/IsMatch 等

支援類別

  • Match:單次匹配結果 (Value, Index, Length, Groups)
  • Group:分組捕獲 (Value, Index, Length, Captures)
  • Capture:單次捕獲片段

核心用法範例

1. 列舉所有單字


Regex r(@"\b\w+\b");
MatchCollection mc = r.Matches("abc ,_foo ,<& mumble7");
foreach (Match m in mc)
    Console.WriteLine(m.Value); // abc, foo, mumble7

2. 分組捕獲:郵遞區號


Regex r(@"^(\d{5})(-\d{4})?$");
Match m = r.Match("98007-4235");
if (m.Success) {
    Console.WriteLine(m.Groups[1].Value); // 98007
    Console.WriteLine(m.Groups[2].Value); // -4235
}

3. Replace 字串替換


// \n → \r\n
string s = Regex.Replace(s, @"\n", "\r\n");

// 動態替換:委派
string result = Regex.Replace(input, @"\d+", m => (int.Parse(m.Value) * 2).ToString());

4. 靜態方法快速使用


bool valid = Regex.IsMatch(email, @"^[\w.+-]+@[\w-]+\.[\w.-]+$");
string[] tokens = Regex.Split(line, @"\s+");

進階技巧

  • 命名分組:(?<name>...) → m.Groups["name"]
  • 非捕獲分組:(?:...) 不佔用 Groups 索引
  • 前瞻/後顧:(?=...) (?!...) (?<=...) (?<!...)
  • 單行/多行模式:RegexOptions.Singleline (.含換行), Multiline (^$匹配行首尾)
  • 編譯優化:RegexOptions.Compiled 重複使用時提升速度

跨平台/語言差異提醒

最佳實務

  1. 複雜模式加註解:Regex(@"^ (?<area>\d{3}) - (?<num>\d{4}) $", RegexOptions.IgnorePatternWhitespace)
  2. 重複使用編譯後的 Regex 實例,避免每次重新解析。
  3. 輸入驗證優先用 IsMatch,擷取資料用 Match/Groups。
  4. 大量文字處理考慮 StringBuilder + Regex.Replace 代替字串串接。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性.NETPerl/PCREJavaScript
{,1} 寫法不支援支援 (= {0,1})不支援
\b Unicode 感知是視版本否 (僅 ASCII)
命名分組語法(?<name>...)(?P<name>...)(?<name>...) (ES2018+)