gpt4 book ai didi

php - preg_match() 和 preg_replace() 慢吗?

转载 作者:可可西里 更新时间:2023-10-31 22:18:27 24 4
gpt4 key购买 nike

我已经使用 PHP 编写代码一段时间了,我一直在读到您应该只在必须时使用 preg_matchpreg_replace,因为这会降低性能。为什么是这样?在一个文件中使用 20 个 preg_matches 而不是使用另一个 PHP 函数真的很糟糕吗?

最佳答案

正如 Mike Brant 在他的回答中所说:使用任何 preg_* 函数都没有错,如果您需要它们。
您想知道在单个文件中进行 20 次 preg_match 调用是否是个好主意,老实说:我会说这太多了。我经常说 “如果您的问题解决方案在任何给定时间依赖于 3 个以上的正则表达式,那么您就是问题的一部分”。不过,我偶尔也会犯下自己的口头禅。

如果您正在使用 20 个 preg_match 调用,您很可能只需仔细查看实际的正则表达式即可将这个数字减半。正则表达式,尤其是 Perl 正则表达式,非常强大,非常值得花时间去了解它们。 为什么它们往往变慢的原因仅仅是因为必须解析正则表达式,并在某个低级别“翻译”到相当数量的分支和循环。比方说,如果您想用大写字符替换所有小写的 a,您当然可以使用正则表达式,但在 PHP 中它看起来像这样:

preg_replace('/a/','A',$string);

查看表达式,第一个参数:它是一个作为参数传递的字符串。该字符串将被解析(解析时,将检查分隔符,创建匹配字符串,然后迭代字符串,将每个字符与模式(在本例中为 a)进行比较,并且 如果子串匹配,它被替换。
看起来有点麻烦,特别是考虑到最后一步(比较子串和替换匹配)是我们真正想要的。

$string = str_replace('a','A',$string);

仅此而已,无需在解析和验证正则表达式时执行额外的检查。
不要忘记 preg_match 也构造了一个匹配数组,并且构造一个数组也不是免费的。

简而言之:正则表达式较慢,因为表达式被解析、验证并最终翻译成一组简单的低级指令。

请注意,在某些情况下,人们使用 explodeimplode 进行字符串操作。这也创建了一个数组,它再次不是免费的。考虑到此后不久您将爆破同一个阵列。也许另一种选择更可取(在某些情况下,preg_replace 可以 在这里更快)。
基本上:正则表达式需要额外的处理,简单的字符串函数不需要。但是当有疑问时,只有一种方法可以绝对确定:设置测试脚本...

关于php - preg_match() 和 preg_replace() 慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14342427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com