2009-01-22 88 views

回答

6

使用靜態實例將每次創建一個新的Regex對象,因此最好自己實例化它。以下是我發現的使用上System.dll中反射:

public static string Replace(string input, string pattern, string replacement) 
{ 
    return new Regex(pattern, RegexOptions.None, true).Replace(input, replacement); 
} 

另外,如果你實例化你自己的情況下,你將能夠編譯它,以及提高用於多種用途的性能。

可以發送RegexOptions.Compiled的靜態Replace重載之一,但是這是毫無意義的,將使用此標誌被實例化Regex對象不能再被使用。

+0

反射器真的清楚。只能使用靜態的真正的一次性。 – 2009-01-22 20:24:02

1

使用正則表達式對象意味着正則表達式只編譯一次,所以你得到更好的性能(你需要保存正則表達式對象)。

2

它不像看起來那麼低效。使用反射器進入Regex構造函數,緩存編譯後的正則表達式代碼。這可能是最耗時的部分。

我通常最初會使用Regex.Replace(),因爲它更方便,只有在存在性能問題時纔會更改。你

也可以寫擴展方法的字符串爲方便起見,如:

public static string RegexReplace(this string source, string pattern, string replacement) 
{ 
    return Regex.Replace(source, pattern, replacement); 
} 
+0

反射器顯示靜態方法無論如何構造一個Regex對象。使用靜態構建自己的對象似乎沒有性能優勢。它看起來對於一次性的速記是有用的。 – 2009-01-22 21:48:40

相關問題