2013-10-10 73 views
3

從使用ORAND運營商或背對背字符類的效率方面說起。風味vs效率

在下面的字符串數據。

1A 
A1 
$1 
$$ 

以下表達式:

^[\w\W][\w\W]$ 

^(?:\w|\W)(?:\w|\W)$ 

^[\w&&\W](?:[\w&&\W])$ 

如何將一致性時生效這裏和真正的區別是什麼在這裏,除了個人的期望使用表達式的味道?

+0

恕我直言,這裏唯一顯着的區別是,第一個更快地閱讀和寫...'' – sp00m

+2

@ sp00m不會'^ .. $'更快? = P – Jerry

+2

第一個更短,但在我看來,3是瘋了。你最好寫下如下內容:'^(?s).. $'或'^ [\ s \ S] {2} $'。 –

回答

3

使用http://regex101.com/正則表達式調試器,您可以看到模式匹配方式的差異。主要的區別在於速度:

  • ^[\w\W][\w\W]$需要6個步驟,以符合您的字符串中的一個
  • ^(?:\w|\W)(?:\w|\W)$需要10個步驟,以符合您的一個字符串
  • ^[\w&&\W](?:[\w&&\W])$需要8個步驟來匹配你的字符串
  • 之一

當然,這高度依賴於正則表達式的風格,引擎的實現和可能的優化。

編輯

  • ^..$需要6個步驟以及

的步驟並不一定直接相關的速度但是在大多數情況下(數量,如果正則表達式是足夠瑣碎),可讀和更好的可維護正則表達式提供了更多的好處,然後節省xy微秒的速度(同樣取決於用例和輸入數據)。

+0

這是我正在尋找的很多很好的答案之一。 – hwnd