У меня есть следующее регулярное выражение, которое отлично работает на моем тестовом сервере, но просто возвращает пустую строку на моем размещенном сервере.
$text = preg_replace('~[^\\pL\d]+~u', $use, $text);
Теперь я уверен, что это сводится к тому, что версия PCRE на хост-сервере не компилируется с включенной поддержкой свойств Unicode. Различия в двух версиях заключаются в следующем:
Мой сервер:
PCRE version 7.8 2008-09-05
Compiled with
UTF-8 support
Unicode properties support
Newline sequence is LF
\R matches all Unicode newlines
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack
Хостинг-сервер:
PCRE version 4.5 01-December-2003
Compiled with
UTF-8 support
Newline character is LF
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Match recursion uses stack
Также обратите внимание, что версия на хост-сервере (та же версия, с которой скомпилирован PHP) довольно старая.
Что меня смущает, так это то, что pcretest не работает на обоих серверах из командной строки с
re> ~[^\\pL\d]+~u
** Unknown option 'u'
хотя это регулярное выражение прекрасно работает при запуске из PHP на моем сервере.
Итак, я полагаю, мои вопросы: не работает ли регулярное выражение на хост-сервере из-за отсутствия свойств Unicode? Или я скучаю по чему-то еще?
Спасибо всем,
Gaz.