2009-04-07 61 views
3

有沒有好的 圖書館 轉換 正則表達式 NFAs ?我看到很多關於這個主題的學術論文,這些文章很有幫助,但對於工作代碼沒有太多的幫助。 將正則表達式轉換爲NFA的庫?

我的問題部分原因是好奇心,部分原因是需要加快正在進行的生產系統上的正則表達式匹配。儘管爲了學習而探索這個主題可能很有趣,但我不確定這是加速模式匹配的「實用」解決方案。我們是一家Java商店,但很樂意在任何語言中指出良好的代碼。

編輯

有趣的,我不知道Java的正則表達式已經NFA的。 this paper 的標題讓我相信不然。順便說一句,我們目前正在做Postgres中的正則表達式匹配;如果簡單的解決方案是將匹配移動到Java代碼中,那將非常棒。

回答

3

解決您的需要,以加快您的正則表達式:

Java的實現它的正則表達式引擎是基於NFA。因此,爲了調整你的正則表達式,我會說你會從更深入的理解引擎的實現中受益。

因此,我將您引導至: Mastering Regular Expressions 本書對NFA引擎以及它如何執行匹配給出了實質性的處理,包括如何調整特定於NFA引擎的正則表達式。

此外,請調查 Atomic Grouping 調整您的正則表達式。

1

聲明:我不是java +正則表達式的專家。但是,如果我理解正確...

如果Java的正則表達式匹配器與大多數其他類似,它確實使用NFA的 - 但不是您期望的方式。您可能聽說過的只是前向實現,而不是僅使用前向實現,而是使用簡化子表達式匹配的回溯解決方案,並且可能需要使用反向引用。但是,它執行交替很差。

你想看: http://swtch.com/~rsc/regexp/regexp1.html (關於在這個改變的架構上表現不佳的邊緣情況)。

我也寫,我想一個問題歸結爲同一件事:

Regex implementation that can handle machine-generated regex's: *non-backtracking*, O(n)?

但基本上,它看起來像一些非常奇怪的原因,所有常見的主要供應商正則表達式implementaions有可怕性能在某些正則表達式上使用時,儘管這是不必要的。

0

聲明:我是一個Google員工,而不是正則表達式的專家。

有一堆快於JDK的正則表達式庫,其中一個是 dk.brics.automaton 。根據 article 中鏈接的基準測試結果,它比JDK實施快大約20倍。

此庫由AndersMøller撰寫,也是 mavenized

相關問題