Как я заменяю символы не в диапазоне [0x5E10, 0x7F35] с '*' в PHP?

Я не знаком с, как шестнадцатеричная обработка регулярных выражений, кто-либо знает?

5
задан openid 28 April 2010 в 09:07
поделиться

1 ответ

Следующее помогает:

$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 раз.

15
ответ дан 18 December 2019 в 11:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: