Я не знаком с, как шестнадцатеричная обработка регулярных выражений, кто-либо знает?
Следующее помогает:
$str = "some മനുഷ്യന്റെ";
echo preg_replace('/[\x{00ff}-\x{ffff}]/u', '*', $str);
// some **********
echo preg_replace('/[^\x{00ff}-\x{ffff}]/u', '*', $str);
// *****മനുഷ്യന്റെ
Важным является модификатор u
(см. здесь ):
Этот модификатор включает дополнительные функциональность PCRE, которая несовместима с Perl. Строки шаблона обрабатываются как UTF-8. Этот модификатор доступен из PHP 4.1.0 или выше в Unix и из PHP 4.2.3 в win32. Действительность UTF-8 шаблона проверяется, начиная с PHP 4.3.5.
И здесь краткое описание, почему \ uFFFF
не работает в PHP:
Perl и PCRE не поддерживают синтаксис \ uFFFF. Вместо этого они используют \ x {FFFF} . Вы можете опустить ведущие нули в шестнадцатеричном числе между фигурными скобками . Поскольку \ x сам по себе не является допустимым токеном регулярного выражения, \ x {1234} нельзя перепутать с совпадением \ x 1234 раз. Он всегда соответствует кодовой точке Unicode U + 1234. \ x {1234} {5678} будет попытаться сопоставить кодовую точку U + 1234 точно 5678 раз.