我需要對源文件中的某些模式進行大量搜索,而用戶正在更改它們,所以我需要執行regexp匹配,這在時間和內存方面非常有效。該模式重複自己,所以應該編譯一次,但我需要能夠檢索子部分(而不是隻是確認一個匹配)java.util.regexp是否足夠高效?
我正在考慮使用java.util.regexp或雅加達perl5util(如果它仍然存在,自從我使用它幾年以來),或者Eclipse的搜索引擎,儘管我懷疑ti是否聰明。
兩者之間是否有顯着的性能差異?
我需要對源文件中的某些模式進行大量搜索,而用戶正在更改它們,所以我需要執行regexp匹配,這在時間和內存方面非常有效。該模式重複自己,所以應該編譯一次,但我需要能夠檢索子部分(而不是隻是確認一個匹配)java.util.regexp是否足夠高效?
我正在考慮使用java.util.regexp或雅加達perl5util(如果它仍然存在,自從我使用它幾年以來),或者Eclipse的搜索引擎,儘管我懷疑ti是否聰明。
兩者之間是否有顯着的性能差異?
我不確定在不同的正則表達式java引擎方面有巨大的性能差距。
但肯定的是構建時,正則表達式(那就是,如果數據足夠大,爲noted by Jeff Atwood)性能問題
你應該避免的唯一的事情是catastrophic backtracking,使用atomic grouping時最好避免。
因此,默認情況下,我會使用java.utils.regexp引擎,除非您有特定的perl兼容的正則表達式源,您需要在程序中重用。
然後我會仔細構建我打算使用的正則表達式。
但是在選擇一臺發動機的長期或另一...,因爲它has beensaid在many ...:
正如VonC所說,你需要知道你的正則表達式。預先編譯正則表達式並不會傷害。否則,每次編譯正則表達式的代價都會嚴重影響性能。
對於某些類別,有替代庫:http://jint.sourceforge.net/jint.html這可能會有更好的性能。然後再一次,這取決於你使用的是哪個版本的java。
JDK 1.6顯示了具有良好功能和性能的正則表達式引擎的成熟度。
總體而言,java.util.regex(非「regexp」)包至少與其他任何Java正則表達式庫一樣好,包括Jakarta ORO(您的「Perl5Util」lib)。此外,它支持原子組和佔有量詞,這兩種方法對於編寫快速正則表達式都是非常寶貴的。它還支持預編譯的正則表達式和捕獲組,但我認爲所有庫都是如此。