Django web框架使用正則表達式來調度傳入的請求。
假設應用程序非常龐大,並且有很多正則表達式,比如數百個。算法儘可能快地選擇正確的RegEx
對於任何傳入的請求,我如何確定哪些正則表達式儘快匹配?逐個遍歷列出的正則表達式是瘋狂的。
Django web框架使用正則表達式來調度傳入的請求。
假設應用程序非常龐大,並且有很多正則表達式,比如數百個。算法儘可能快地選擇正確的RegEx
對於任何傳入的請求,我如何確定哪些正則表達式儘快匹配?逐個遍歷列出的正則表達式是瘋狂的。
一個選項是構造一個可以並行匹配所有正則表達式的確定性自動機。一種方法如下:
現在,每當你收到新郵件時,您可以運行表驅動的這一信息,從而有效地並行運行,並返回其正則表達式,如果有的話,比賽的每一個正則表達式DFA。由於生成的DFA可能非常大,因此在內存中可能會產生大量成本,但匹配任何傳入正則表達式的時間與要匹配的字符串大小是線性關係。
請記住,正則表達式的順序也很重要,所以如果您最終處於接受多個輸入表達式的狀態,則需要以確保你選擇原始lis中的第一個噸。 –
如果您對應用程序有控制權,爲什麼不包含一些元數據來指示要使用的正則表達式的類型?您可以使用該元數據來選擇正確的RegEx。
將正則表達式合併爲一個,方法是將它們連接在一起|並命名組:(?< 1> regex1的)|(?< 2> regex2)|?(< 3> regex3 ...
測試輸入一次,並確定哪個正則表達式通過檢查指定的組相匹配
。
@templatetypedef的答案在你如何做的時候是正確的,但是除非你有數百個處理程序(甚至可能還沒有),這真的不是一個很大的性能問題 - 正則表達式匹配速度很快,並且需要與實際處理請求的開銷相比,只有很少的時間 –