正则表达式的优化---用RegexBuddy进行效率分析

通过《高性能的正则表达式效率优化》文章,作者实践并优化正则表达式,避免了不必要的分组和冗余部分。使用RegexBuddy分析工具,展示了优化后的正则表达式匹配流程,仅12步和一次回溯,显著提升了效率,并解决了域名合法性、回溯等问题。

昨天看到《高性能的正则表达式效率优化》一文,自己动手试了试。发觉其优化后的正则表达式仍太罗嗦,自己另写~并用RegexBuddy查看匹配流程。其优化后的 正则表达式如下:
^\w+([\.-]\w+)*@\w+([\.-]\w+)*\.\w+([-\.]\w+)*$
该表达式有几个不足之处:
1. 头尾不应该用^$
2. 无须分组,这里用了三个组,若其用于网络爬虫将严重拖慢速度、吞噬内存
3. 没有域名合法性检查
4. @符号前名称判断太罗嗦
5. @符号后二处\w+([.-]\w+)*,明显太累赘
我的正则表达式如下:

\b[\w\.\-]+\b@(?:\b[\w\-]+\.){1,2}[a-zA-Z]{2,3}

测试用文本同前文例子,如图:
正则表达式测试RegexBuddy图片
点选“Debug”按钮右侧的倒三角,选择“Debug everywhere”,
得到匹配流程分析:
匹配流程
可以看到只有12步,及一个回溯!效率高得多了!!前述五个问题都得到解决。该表达式主要使用\b来匹配一个词的头尾。

几天后,得空又看到这段正则表达式的不足之处,没考虑正则表达式引擎的运行机制:按字符、表达式的顺序执行匹配
最优表达式,在三段域名情形下(admin@open-lib.com.cn)无回溯匹配:

\b[\w\.\-]+\b@\b[\w\-]+\b(?:\.[A-Za-z]{2,3}){1,2}\b

完!快自己动手用RegexBuddy试试吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值