我一直在
PHP编码一段时间,我一直在阅读,你只能使用preg_match和preg_replace,因为它会降低性能.为什么是这样?在一个文件中使用20个preg_matches而不是使用另一个PHP函数真的很糟糕.
正如麦克·布兰特(Mike Brant)在答案中所说:如果您需要它们,使用任何preg_ *函数没有任何问题.
你想知道在一个文件中是否有20个preg_match调用是一个好主意,老实说:我说这太多了.我经常说:“如果您的问题解决方案依赖于任何给定时间的3位以上的正则表达式,那么您就是问题的一部分.我偶尔犯了我自己的咒语.
你想知道在一个文件中是否有20个preg_match调用是一个好主意,老实说:我说这太多了.我经常说:“如果您的问题解决方案依赖于任何给定时间的3位以上的正则表达式,那么您就是问题的一部分.我偶尔犯了我自己的咒语.
如果您使用20个preg_match调用,那么您可以通过仔细观察实际的正则表达式来减少该数字的几率.正则表达式,特别是Perl正则表达式,非常强大,非常值得了解它们的时间.它们往往更慢的原因只是因为正则表达式必须被解析,并且被“翻译”到相当多的分支和循环在一个低水平.如果你想用一个大写字符替换所有小写字母,那么你可以使用一个正则表达式,但是在PHP中,它将如下所示:
preg_replace('/a/','A',$string);
看看表达式,第一个参数:它是作为参数传递的字符串.将解析此字符串(解析时,分隔符被检查,创建匹配字符串,然后重复字符串,每个字符与模式(在这种情况下为a)进行比较,如果子字符串匹配,则替换它.
看起来像一个支票,特别是考虑到最后一步(比较子串和替换匹配)是我们真正想要的.
$string = str_replace('a',$string);
只是这样,没有在正则表达式被解析和验证时执行额外的检查.
不要忘记,preg_match还构造了一个匹配的数组,构造数组也不是免费的.
简而言之:正则表达式更慢,因为表达式被解析,验证,最终被转换成一组简单的低级指令.
请注意,在某些情况下,人们使用爆炸和内爆来进行字符串操作.这也创建了一个不是空闲的数组.考虑到你之后不久就爆发了相同的阵列.也许另一个选择是更可取的(在某些情况下,preg_replace可以在这里更快).基本上:正则表达式需要额外的处理,简单的字符串函数不需要.但是当有疑问的时候,只有一种方法是绝对确定的:设置一个测试脚本