在必须使用正则表达式解析大量字符串的场景中,考虑到所有测试都使用相同的 RegEx 指针,这样会更快:
- 单独测试数组中的每个字符串,或者;
- 将所有内容连接成一个大字符串并只测试一次?
我相信数字 2 最好,而不是多次启动 RegEx 引擎来处理字符串数组。然而,在 PHP (PCRE) 中进行了一些测试后,这似乎是不真实的。
基准
我在 PHP 5.3 (源代码)中做了一个简单的基准测试,得到了以下结果:
122185 次交互在 5 秒内测试数组中的多个较小字符串
5 秒内完成26853 次交互,进行单个大字符串测试
因此,我必须得出结论,第一种方法最多快 5 倍。但是,我想要求一个权威的答案来确认这一点;由于一些我不知道的 PHP 优化,我可能会错误地假设事情。
在使用正则表达式测试大字符串之前,是否总是一个更优化的解决方案,而不是专门在 PCRE 中?
preg_grep()
我认为这里不应该考虑这个功能。这是一个基准测试,而不是优化问题。更不用说该函数是特定于 PHP 的方法。此外,preg_match_all
返回所有匹配的子字符串,而preg_grep
仅指示匹配的数组元素。