2011-08-11 29 views
0

我正在使用Java/Groovy通過RegEx在字符串上查找匹配(並將它們提取出來)。在字符串中找到200個或更多正則表達式匹配的最佳方式是什麼,可以說性能方面是5000個字符。簡而言之,是否有可能避免爲每個RegEx掃描字符串?上一個字符串的數百個正則表達式

我可以使用java提供的模式和匹配器類,但然後我將不得不編譯200個模式,然後將字符串傳遞給匹配器200次。這是做到這一點的唯一方法嗎?

+1

你的圖案有沒有相似的圖案?您可以搜索一些通用模式(例如A.A),提取子字符串,然後在更具體的模式(ABA,ACA)上匹配它嗎? – Paolo

+0

這些正則表達式是什麼?他們是否有序?如果沒有,你必須掃描每個正則表達式的整個字符串。如果是的話,你可能會在最後一場比賽後開始。 – Thomas

+0

你使用「真正的」正則表達式還是你只是在尋找單詞(全文搜索)。在後一種情況下,某些索引可能會減少運行時間。 – Jens

回答

3

如果你的正則表達式沒有共同的匹配,你總是可以通過使用替代方法將它們組合在一個巨大的正則表達式中。

(regex1) | (regex2) | .... | (regexN) 

但是鑑於你的問題,我認爲你應該考慮從正則表達式切換到適當的掃描儀/分析器組合的複雜性。這需要時間,但最終的解決方案將更易於管理。你爲什麼不退房Antlr

+0

使用正確的解析器+1。它會*讓你的生活變得更容易。 – exhuma

+0

Will Antlr是否適用於鬆散定義的語法?例如,如果我想從一個陳述中捕捉一個人的身高,有很多方式可以表達這個事實。對於Ex:他的身高是6英尺,他是6英尺高等。我正在考慮編寫正則表達式列表,它可以從大多數常見類型的句子中提取高度。此外,我不想捕捉只有一個這樣的事實,有20 30更多 – Sap

+0

Antlr面向識別形式語言,所以它可能是最具體的工具,你可以找到。另一方面,你可能能夠做的是隔離特定的關鍵字和構造,而忽略其餘的。你最終可能會得到比一堆正則表達式更結構化的東西,但是需要一些工作來明確處理你不關心的東西。 –

相關問題