2012-03-16 65 views
6

我是否應該創建一個複雜的正則表達式來處理手頭的所有案例,還是應該在多個正則表達式中打破一個複雜的正則表達式?我應該創建一個複雜的RegEx還是多個複雜的RegEx?

我很關心使用複雜正則表達式的性能。 將複雜的正則表達式分解爲更小的簡單正則表達式會更好嗎?

+2

在純粹的表現方面,取決於太多的東西。但是在可讀性和可維護性方面,短正則表達式的組合非常出色。 – bdares 2012-03-16 07:37:24

回答

2

因爲編譯器優化,我認爲現在不會有太大的區別,但是,使用簡單的代碼會讓您更容易理解代碼,從而使維護更加輕鬆。

3

如果您想對性能問題提供有意義的答案,則需要對兩種情況進行基準測試。

關於可讀性/可維護性,您可以使用任何語言編寫難以讀懂的代碼,因此您可以使用正則表達式。如果你寫了一個大的文件,一定要使用x修飾符(在c#中爲IgnorePatternWhitespace),並使用註釋來構建正則表達式。

隨機選擇從我過去的答案之一c#例如:

MatchCollection result = Regex.Matches 
    (testingString, 
     @"  
      (?<=\$) # Ensure there is a $ before the string 
      [^|]* # Match any character that is not a | 
      (?=\|) #Till a | is ahead 
     " 
     , RegexOptions.IgnorePatternWhitespace); 
+0

也看看我的博客文章:[你寫了可讀的正則表達式嗎?](http://blog.xisb.de/?p=57),我提供了一些關於使用'RegexOptions.IgnorePatternWhitespace'的更多細節。 – stema 2013-07-03 19:37:53

-1

複雜的正則表達式可以很慢,但是它取決於你的正則表達式和環境。以string.trim()爲例。它可以用正則表達式輕鬆實現。您可以使用一個或兩個正則表達式(分別刪除前後空白)。這裏有人花了11個不同的JavaScript修剪實現,並在不同的瀏覽器中對它們進行了基準測試:http://blog.stevenlevithan.com/archives/faster-trim-javascript。在這種情況下,一個正則表達式在大多數情況下都會浪費大量時間。