这个regex模式的性能很差。
(?s:.+<.*@.+\..+>.*:) 在我的java应用程序中。第二天,我安装了java分析器,并开始尝试一些优化,几个小时后,我在我的模式中首先添加了"^“。
^(?s:.+<.*@.+\..+>.*:) 性能要好得多(在大约1500次操作中,7秒对800毫秒)。
我的问题是为什么?
发布于 2016-03-09 16:23:15
这很清楚..。让我问您,当您在regex开头使用^时,您知道它的含义吗?
^断言在字符串开头的位置
因此,当您在正则表达式的开头附加^时,实际上减少了很多过程。这导致捕获组(在regex中)只匹配字符串的开头,如果不匹配,则匹配中断。
发布于 2016-03-09 16:25:53
正如注释中已经指出的那样:因为在第一个表达式中,每个字符都经过几次测试以找到可能的匹配,而第二个表达式绑定到行/字符串的开头,并且当它失败时,将不再检查其他字符(因此regex引擎会更快地失败,这是构建好表达式时非常重要的方面)。
但也请阅读@WiktorStribiżew的评论,他肯定比我更有判断力和(或)经验
https://stackoverflow.com/questions/35896710
复制相似问题