RegEx: Удалить не-буквы UTF-8 Safe, быстро - PullRequest
11 голосов
/ 12 ноября 2011

Я пытаюсь удалить все, кроме допустимых букв (с любого языка) в PHP.Я использовал это:

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

Но это мучительно медленно.Занимает примерно в 30 раз больше времени:

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

Я имею дело с большими объемами данных, поэтому использовать медленный метод действительно невозможно.делать это?

Ответы [ 2 ]

4 голосов
/ 12 ноября 2011

Что ж, удивительно, что это всего в 30 раз медленнее, поскольку при проверке, является ли определенная кодовая точка буквой или нет, нужно учитывать в 1000 раз больше символов, чем просто a-z

Тем не менее, вы можете немного улучшить свое регулярное выражение:

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

должен ускорить его, объединив смежные разделители без букв и пробелов в одну операцию замены.

2 голосов
/ 12 ноября 2011

Вы можете попробовать использовать новую версию PCRE 8.20 с опцией --enable-jit. Это JIT скомпилирует регулярное выражение и может улучшить производительность для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...