2011-02-28 399 views
6

非常簡單。什麼是最快的正則表達式將返回真正的任何輸入?C#。最快的正則表達式匹配任何字符串

編輯:爲什麼倒票?似乎是一個非常合理的問題。我使用了一個採用正則表達式過濾器的函數,我想知道什麼能夠最快速地匹配所有內容。 「不使用正則表達式」不是答案。

+5

你有沒有想過這個?我聽起來像巧克力茶壺一樣有用。 – 2011-02-28 20:39:47

+12

...不使用正則表達式? – 2011-02-28 20:40:05

+2

什麼現實世界的情景引發了這個問題? – Oded 2011-02-28 20:40:53

回答

4
class FastestRegex 
{ 
    public static readonly Regex RE = new Regex("", RegexOptions.Compiled); 
} 
+1

只需要注意一下它,但你可能只需使用.NET內部正則表達式緩存並堅持正則表達式的靜態函數 – LorenVS 2011-02-28 20:45:18

+0

@LorenVS:這取決於你創建了多少個正則表達式,以及你的規模大小已經設置了正則表達式緩存。但是你知道**這個將被重用,所以爲什麼不手動緩存呢? – 2011-03-01 00:47:55

1

我要說的是,它必須是這樣的

.*? 

這將檢查與任何字符匹配,但是因爲懶運營商,就根本沒有字符串相匹配。我想它甚至會在檢查第一個字符之前返回。這是假設空字符串不會爲所有輸入返回true。

1

我猜想,無論是空字符串,"",或啓動的輸入,"^",將導致最快的(正)匹配任何字符串。

您應該自己嘗試一下:運行一些快速測試,"^"的模式通常比Oracle的1.6 JRE上的""快,但在Mono 2.4上則相反。在這兩種情況下,.*?方式較慢。

但是,再次測試一下你自己的系統。

0

沒有最快的正則表達式從不運行正則表達式。因此,最快的正則表達式就是實際運行的正則表達式。 /[\S\s]?/或者,我猜這是更快/.?/s

插件 - Interresting雖然/^/ PERL環路分數更快圈3000萬次。但是,預編譯所有的正則表達式首先會將它們放慢5倍。去圖。也許是因爲它太簡單了。