在需要使用正则表达式解析大量字符串的情况下,考虑到相同的RegEx针将用于所有测试,哪种方法更快:
我在 PHP 5.3 中制作了一个简单的基准 (源代码),并得到以下结果:
在使用正则表达式测试之前,将大字符串分割成片段是否总是更优化的解决方案,而不仅仅是在 PCRE 中?
- 逐个测试数组中的每个字符串;
- 将所有内容合并为一个大字符串,然后进行一次测试?
基准测试
我在 PHP 5.3 中制作了一个简单的基准 (源代码),并得到以下结果:
因此,我必须得出第一种方法快了多达 5 倍的结论。然而,我想请教权威答案来确认这一点;由于我不知道某些 PHP 优化,可能会错误地做出假设。122185 次交互,在 5 秒内测试了数组中多个较小字符串
26853 次交互,在 5 秒内进行了单个大字符串测试
在使用正则表达式测试之前,将大字符串分割成片段是否总是更优化的解决方案,而不仅仅是在 PCRE 中?
preg_grep()
我认为这个函数不应该在这里考虑。这是一个基准测试,而不是优化问题。更不用说该函数是一种 PHP 特定的方法。此外,preg_match_all
返回所有匹配的子字符串,而 preg_grep
只指示哪些数组元素匹配。