我正在寫一個CSV解析器,併爲了檢測我可以期望獲得的文件的不同數據類型,我有一個每個數據類型的地圖,每個包含正則表達式我將其定義爲有效且可識別的。例如,對於我的整數值,這裏是我的地圖:正則表達式效率使用交替與單個正則表達式
Map<String, String> integerFormatRegexps = new HashMap<String, String>();
integerFormatRegexps.put("^[1-9]\\d{1,9}$", "##0");
integerFormatRegexps.put("^-[1-9]\\d{1,9}$", "-##0");
integerFormatRegexps.put("^0$", "0");
現在,我已經見過幾個examples這裏,所以這裏的而不是這些正則表達式分離,他們使用的交替,在那裏,而不是三個正則表達式,我可以只使用一個:
Map<String, String> integerFormatRegexps = new HashMap<String, String>();
integerFormatRegexps.put("^[1-9]\\d{1,9}$|^-[1-9]\\d{1,9}$|^0$", "Integer");
我的問題是這兩種方法的將是一般更有效,在Java的匹配模式是什麼時候?迭代通過單獨的簡單正則表達式來查找匹配項,還是僅匹配一個更復雜的正則表達式?
什麼阻止你自己對兩個變體進行基準測試? –
這是[Perl的類似問題](http://stackoverflow.com/questions/36420517/is-it-faster-to-use-alternation-than-subsequent-replacements-in-regular-expressi)。 *總結*:**請記住,你正在比較蘋果和橙子**。 –
@Lashane來自SO的其他職位(包括Wiktor引用的職位,這似乎是一個非常具體的話題,而且需要很多經驗,實際上我可以自己衡量它,但是我應該怎麼衡量呢?非常具體,因爲我試圖提供一個例子,但它是一個普遍的問題,正如其名稱所暗示的那樣:在java正則表達式匹配中將使用交替命中性能嗎? – carlossierra