2013-08-28 41 views
0

這種情況是不同的我認爲,我有一個詞,我有100個正則表達式。我想檢查它傳遞哪個正則表達式?如何以優化的方式做到這一點?將NSString與一串正則表達式比較

+0

我們可以使用'|'(pipe)分隔符合並正則表達式,但是您最好在循環中檢查它,否則預計工作會變慢。 – NeverHopeless

+0

@NeverHopeless,謝謝你的寶貴意見。我對它匹配的正則表達式模式更感興趣,以及如何使用|來獲取匹配的正則表達式模式(管道)符號? – Arock

+0

@Arock我不明白問題在哪裏?難道你只是循環遍歷正則表達式,並嘗試所有,如果成功,然後打印出來,例如? – HamZa

回答

0

最有效的方法是將所有這些正則表達式組合成確定性有限自動機(有限狀態機)。然後通過該有限狀態機運行字符串。

Michael Sipser's Introduction to the Theory of Computation解釋瞭如何做到這一點。這是相當複雜的,因此是對本書的參考。

在您手動構建DFA之後,您可以在代碼中實現它。

有些工具可以爲你做到這一點,比如flex。 flex將正則表達式作爲輸入並生成DFA作爲.c文件,然後您可以在項目中使用它。您可以配置flex以返回一個標記來指示哪個正則表達式已匹配。

flex是一個unix工具,是OS X 10.8的一部分。