我不熟悉正则表达式如何处理十六进制,有人知道吗?
最佳答案
下面的技巧:
$str = "some മനുഷ്യന്റെ";
echo preg_replace('/[\x{00ff}-\x{ffff}]/u', '*', $str);
// some **********
echo preg_replace('/[^\x{00ff}-\x{ffff}]/u', '*', $str);
// *****മനുഷ്യന്റെ
重要的是 u
修饰符(参见 here ):
This modifier turns on additional functionality of PCRE that is incompatible with Perl. Pattern strings are treated as UTF-8. This modifier is available from PHP 4.1.0 or greater on Unix and from PHP 4.2.3 on win32. UTF-8 validity of the pattern is checked since PHP 4.3.5.
和here简短说明为什么 \uFFFF
在 PHP 中不起作用:
Perl and PCRE do not support the \uFFFF syntax. They use \x{FFFF} instead. You can omit leading zeros in the hexadecimal number between the curly braces. Since \x by itself is not a valid regex token, \x{1234} can never be confused to match \x 1234 times. It always matches the Unicode code point U+1234. \x{1234}{5678} will try to match code point U+1234 exactly 5678 times.
关于php - 如何在 PHP 中用 '*' 替换不在 [0x5E10, 0x7F35] 范围内的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2728070/