正则表达式的优化---用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}

测试用文本同前文例子,如图:

点选“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试试吧

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...