RegEx:快速删除非字母UTF-8安全

时间:2011-11-12 09:25:44

标签: php regex utf-8

我正在尝试删除PHP中除有效字母(来自任何语言)之外的所有内容。我一直在用这个:

$content=preg_replace('/[^\pL\p{Zs}]/u', '', $content);

但这很痛苦。比以下时间长约30倍:

$content=preg_replace('/[^a-z\s]/', '', $content);

我正在处理大量数据,因此使用慢速方法确实不可行。

有更快的方法吗?

2 个答案:

答案 0 :(得分:4)

嗯,这只是一个奇迹,它只会慢30倍,因为在检查某个代码点是否是一个字母时,它需要花费大约1000倍的字符而不仅仅是a-z

那就是说,你可以改善你的正则表达式:

$content=preg_replace('/[^\pL\p{Zs}]+/u', '', $content);

应该通过将相邻的非字母/空格分隔符组合成一个单独的替换操作来加快速度。

答案 1 :(得分:2)

您可以尝试使用带有--enable-jit选项的新PCRE 8.20版本。这将是JIT编译正则表达式并可能为您提高性能。