我正在尝试删除PHP中除有效字母(来自任何语言)之外的所有内容。我一直在用这个:
$content=preg_replace('/[^\pL\p{Zs}]/u', '', $content);
但这很痛苦。比以下时间长约30倍:
$content=preg_replace('/[^a-z\s]/', '', $content);
我正在处理大量数据,因此使用慢速方法确实不可行。
有更快的方法吗?
答案 0 :(得分:4)
嗯,这只是一个奇迹,它只会慢30倍,因为在检查某个代码点是否是一个字母时,它需要花费大约1000倍的字符而不仅仅是a-z
。
那就是说,你可以改善你的正则表达式:
$content=preg_replace('/[^\pL\p{Zs}]+/u', '', $content);
应该通过将相邻的非字母/空格分隔符组合成一个单独的替换操作来加快速度。
答案 1 :(得分:2)
您可以尝试使用带有--enable-jit
选项的新PCRE 8.20版本。这将是JIT编译正则表达式并可能为您提高性能。