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

昨天看到《高性能的正则表达式效率优化》一文,自己动手试了试。发觉其优化后的正则表达式仍太罗嗦,自己另写~并用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进行效率分析_第1张图片
点选“Debug”按钮右侧的倒三角,选择“Debug everywhere”,
得到匹配流程分析:
正则表达式的优化---用RegexBuddy进行效率分析_第2张图片
可以看到只有12步,及一个回溯!效率高得多了!!前述五个问题都得到解决。该表达式主要使用\b来匹配一个词的头尾。

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

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

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

你可能感兴趣的:(综合,编程调试手记)