2016-12-02 84 views
-5

而不是測試所有或語句,它會看看第一個字符是否匹配。標題解釋了這一切。是否有程序或方法自動將ab | ac | an | db | df更改爲(a(b | c | n)| d(b | f))

+0

用於什麼?這只是關於任意字符串的字符串操作,還是你想寫第一種形式並讓第二種形式的正則表達式引擎運行?如果是後者,那聽起來就像要優化正則表達式編譯,這是一個龐大而複雜的領域。 – lxop

+1

請在[help]中花費一些時間,特別是在[ask]中。當你這樣做時,你可以回來並且編輯你的問題,以明確你想要做什麼,包括你自己努力解決問題,解釋你遇到的困難,並要求* *具體**問題,我們可以嘗試幫助。一個只包含標題和*標題的問題表明,所有內容在這裏都不起作用。如果您不值得您提出一個體面的問題,我們的努力肯定不值得回答。 –

+0

@Ixop這是第一個。 – weeeeeee

回答

1

處理正則表達式時,它首先轉換爲非確定性有限狀態自動機(NFA)。然後,將NFA轉換成確定性有限狀態自動機(DFA),這通常導致更多的狀態。第三步是將DFA轉換爲狀態數最少的「最小」DFA。 當且僅當它們導致相同的最小DFA時,兩個正則表達式纔是等價的。因此,兩個正則表達式ab|ac|an|db|df(a(b|c|n)|d(b|f))明顯相同,會導致相同的最小DFA,並且會以相同的速度執行模式匹配。沒有什麼特別的理由可以選擇一個。

+0

這是否適用於所有正則表達式引擎? – weeeeeee

+0

@weeeeeee - 您的問題_這是否適用於所有正則表達式引擎?_是不明智的,因爲任何時候任何人都可以編寫一個不適用的異常正則表達式引擎,但爲什麼要關心它呢? – Armali

相關問題