RegEx: удалите ненужные символы UTF-8 Safe, Quickly
Я пытаюсь удалить все, кроме допустимых букв (с любого языка) в PHP. Я использовал это:
$content=preg_replace('/[^\pL\p{Zs}]/u', '', $content);
Но это мучительно медленно. Доходит примерно в 30 раз дольше:
$content=preg_replace('/[^a-z\s]/', '', $content);
Я имею дело с большими объемами данных, поэтому действительно нецелесообразно использовать медленный метод.
Есть ли более быстрый способ сделать это?
Ответы
Ответ 1
Ну, это удивительно, что это всего лишь в 30 раз медленнее, поскольку в нем нужно учитывать примерно в 1000 раз больше символов, чем просто a-z
при проверке, является ли определенная точка кода буквой или нет.
Тем не менее, вы можете немного улучшить свое регулярное выражение:
$content=preg_replace('/[^\pL\p{Zs}]+/u', '', $content);
должен ускорить его, объединив соседние разделители без букв/пробелов в одну операцию замены.
Ответ 2
Вы можете попробовать использовать новую версию PCRE 8.20 с опцией --enable-jit
. Это JIT скомпилирует регулярное выражение и может улучшить производительность для вас.