我正在編寫一個C#類型的Telnet客戶端,我必須解析的部分是ANSI/VT100轉義序列,特別是那些用於顏色和格式的(詳細的here)。爲什麼這個正則表達式更快?
一種方法我已經是一個找到所有的代碼,並刪除它們,因此,如果需要,我可以呈現無任何格式的文本:
public static string StripStringFormating(string formattedString)
{
if (rTest.IsMatch(formattedString))
return rTest.Replace(formattedString, string.Empty);
else
return formattedString;
}
我是新來的正則表達式,我建議還是使用這個:
static Regex rText = new Regex(@"\e\[[\d;]+m", RegexOptions.Compiled);
但是,如果轉義碼由於服務器上的錯誤而不完整,則失敗。所以後來這個建議,但我的朋友警告說,它可能會比較慢(這其中也符合其他條件(Z),我以後可能遇到):
static Regex rTest =
new Regex(@"(\e(\[([\d;]*[mz]?))?)?", RegexOptions.Compiled);
這不僅工作,但實際上更快並減少了對文字渲染的影響。有人可以向正則表達式新手解釋,爲什麼? :)
它現在想,這有一定道理,運行上沒有匹配行一個正則表達式是一樣的先運行一個檢查看看它是否匹配。你會得到相同的結果! – Nidonocu 2008-09-13 07:17:10