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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/king_xing/article/details/52771465

昨天看到《高性能的正则表达式效率优化》一文,自己动手试了试。发觉其优化后的正则表达式仍太罗嗦,自己另写~并用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试试吧

展开阅读全文

没有更多推荐了,返回首页