我已经用PHP编码了一段时间,我一直在读,如果必须的话,应该只使用preg_match
和preg_replace
,因为它会降低性能。为什么是这样?在一个文件中使用20 preg_matches
而不是使用另一个PHP函数真的很糟糕。
正如Mike Brant在回答中所说:使用任何preg_*
函数都没有错,if您需要它们。您想知道在单个文件中进行20个preg_match
调用是否是一个好主意,老实说:我要说的太多了。我经常说“如果您的问题解决方案在任何给定时间都依赖于3个以上的正则表达式,那么您就是问题的一部分”。不过,我偶尔也因自己的口头而犯了罪。
如果您are使用20个preg_match
调用,则可以通过仔细查看实际的正则表达式将数字减少一半。正则表达式,尤其是Perl正则表达式,功能强大,非常值得花时间来了解它们。它们趋向于变慢的原因仅是因为必须对正则表达式进行解析,然后将其“转换”为一定数量的低级分支和循环。例如,如果要用大写字符替换所有小写a
,则可以使用正则表达式,但是在PHP中,它看起来像这样:preg_replace('/a/','A',$string);
查看表达式,第一个参数:这是一个作为参数传递的字符串。该字符串将被解析(在解析时,检查定界符,创建匹配字符串,然后迭代该字符串,将每个字符与模式进行比较(在这种情况下为匹配,将其替换。似乎有点麻烦,尤其是考虑到我们真正想要的就是最后一步(比较子字符串和替换匹配项)。a
),并在子字符串if
$string = str_replace('a','A',$string);
只是这样做,在解析和验证正则表达式时无需执行其他检查。不要忘记preg_match
还会构造一个匹配数组,而且构造一个数组也不是免费的。
简而言之,正则表达式的速度较慢,因为对表达式进行了解析,验证并最终将其转换为一组简单的低级指令。
注意,在某些情况下,人们使用explode
和implode
进行字符串操作。同样,这也会创建一个数组-再次-不是免费的。考虑到此后不久您将内陷于同一阵列。也许更希望有另一个选择(在某些情况下preg_replace
can
更快)。基本上:正则表达式需要其他处理,而简单的字符串函数则不需要。但是,如果有疑问,只有一种方法可以绝对确定:设置测试脚本...preg*
函数要快,因此,如果遇到脚本运行得非常频繁和/或要执行大量字符串操作的情况,使用正则表达式的影响可能会开始感到。STARTED