私は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