我正在写一个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