这次研究PHP正则效率与PHP字符串问题,许多时候我们都利用正则,虽然接头用PHP正则表达式的漏洞也较量多,PHP正则表达式是不是真的很不效率,EnEnba开始上例子来看看,数据抉择一切。
测试情况:XP+Apache2.2.6 +PHP5.2.17
例子很简朴,就是匹配hao123.com首页的<title>标签内容。hao123.com的源码下载至当地文件为hao123.html。为了浮现公正,从获得字符串开始 记时开始,匹配100次后竣事。
以下的正则和字符串操纵都能正确匹配出功效。
测试源码1:
贪婪型的正则,这个是网上最多的正则
测试源码2:
非贪婪型的正则、这是贪婪型的优化版
测试源码3:
无回溯的正则,这算是此正则的最优版
测试源码4:
字符串操纵,比拟利用正则有什么优势。
100次轮回用时功效:
一、测试源码1:贪婪型的正则
用时:
1.84824609756s
1.81924510002s
1.83465003967s
1.82647705078s
1.83154320717s
1.81038379669s
1.80642414093s
1.81480193138s
1.81055712700s
1.82441902161s
二、测试源码2:非贪婪型的正则
0.00148916244507s
0.00124597549438s
0.00130200386047s
0.00129199028015s
0.00134801864624s
0.00129318237305s
0.00124812126160s
0.00129103660583s
0.00125002861023s
0.00144720077515s
0.00070405006408s
三、测试源码3:无回溯的正则
0.000961065292358s
0.000746965408325s
0.000747203826904s
0.000746011734009s
0.000751018524170s
0.000831127166748s
0.000749111175537s
0.000746011734009s
0.000929832458496s
0.000748157501221s
0.000812053680420s
四、测试源码4:字符串操纵
0.561131954193s
0.558562994003s
0.554402112961s
0.558073997498s
0.558518171310s
0.560245990753s
0.557929992676s
0.559715986252s
0.560138940811s
0.556318998337s
0.558421134949s
10次功效平均用时:(时间越短效率越高)
一、测试源码1:贪婪型的正则
1.82267475128s
二、测试源码2:非贪婪型的正则
0.00139107704s
三、测试源码3:无回溯的正则
0.00087685585s
四、测试源码4:字符串操纵
0.56434602737s
此例子功效
效率:无回溯的正则 > 非贪婪型的正则 > 字符串操纵 > 贪婪型的正则
与字符串操纵的效率倍数
贪婪型的正则0.33倍 非贪婪型的正则400倍 无回溯的正则700倍
最好最坏后果相差2000倍!!!!
以后例子的功效可以看出,正则的效率是东倒西歪。回溯较多的贪婪型的正则表达式,效率很是低,低于字符串操纵,字符串操纵上看,却远远低于非贪婪和无回溯的正则,已经不是一个数量级。无回溯的正则长短贪婪型的正则的1.75倍,也长短常明明的。
博主结论:正则表达式的效率不必然比字符函数的效率低。可是可以必定的是正则表达式的优化做得欠好的话,其效率可以是天壤之别。所以,正则表达式是可以利用的,但必然要淘汰正则的回溯,优化正则表达式是必需的。
enenba.com 原创正则文章,转载请注明出处 ?post=143
end