(?>...)
string x = "Live for nothing,dIE for something";
Regex r1 = new Regex(@".*thing,"); // 貪婪匹配 → 回溯成功
Regex r2 = new Regex(@"(?>.*)thing,"); // 非回溯 → 匹配失敗
r1:.* 吞掉全字串 → 回溯找到 thing, 匹配成功。
r2:非回溯模式下 .* 吞掉全字串後無法回退,整體匹配失敗。
(?=...) / (?!...)
string x = "1024 used 2048 free";
Regex r1 = new Regex(@"\d{4}(?= used)"); // 匹配 1024 (後面必須是 " used")
Regex r2 = new Regex(@"\d{4}(?! used)"); // 匹配 2048 (後面不能是 " used")
斷言本身不消耗字符,不屬於匹配結果一部分。
(?<=...) / (?
string x = "used:1024 free:2048";
Regex r1 = new Regex(@"(?<=used:)\d{4}"); // 匹配 1024 (前面必須是 "used:")
Regex r2 = new Regex(@"(?
\xXX:0-255 字符 (如空格 \x20)\uXXXX:任意 Unicode 字符 (如漢字 [\u4e00-\u9fa5])