首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用"^“作为模式的开始,java - regex的性能很慢。

不使用"^“作为模式的开始,java - regex的性能很慢。
EN

Stack Overflow用户
提问于 2016-03-09 16:08:02
回答 2查看 104关注 0票数 1

这个regex模式的性能很差。

代码语言:javascript
复制
(?s:.+<.*@.+\..+>.*:) 

在我的java应用程序中。第二天,我安装了java分析器,并开始尝试一些优化,几个小时后,我在我的模式中首先添加了"^“。

代码语言:javascript
复制
^(?s:.+<.*@.+\..+>.*:) 

性能要好得多(在大约1500次操作中,7秒对800毫秒)。

我的问题是为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-09 16:23:15

这很清楚..。让我问您,当您在regex开头使用^时,您知道它的含义吗?

^断言在字符串开头的位置

因此,当您在正则表达式的开头附加^时,实际上减少了很多过程。这导致捕获组(在regex中)只匹配字符串的开头,如果不匹配,则匹配中断。

票数 1
EN

Stack Overflow用户

发布于 2016-03-09 16:25:53

正如注释中已经指出的那样:因为在第一个表达式中,每个字符都经过几次测试以找到可能的匹配,而第二个表达式绑定到行/字符串的开头,并且当它失败时,将不再检查其他字符(因此regex引擎会更快地失败,这是构建好表达式时非常重要的方面)。

但也请阅读@WiktorStribiżew的评论,他肯定比我更有判断力和(或)经验

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35896710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档