在不使用u
标志的情况下,可以使用的十六进制范围是[\x{00}-\x{ff}]
,但是如果使用u
标志,则可以使用4字节值\x{7fffffff}
([\x{00000000}-\x{7fffffff}]
)。
因此,如果我执行以下代码:
preg_match("/[\x{00000000}-\x{80000000}]+/u", $str, $match);
将收到此错误
Warning: preg_match(): Compilation failed: character value in \x{...} sequence is too large
所以我不能匹配一个像这样的字母和等价的十六进制值f0 a1 83 81
。问题不是如何匹配这些字母,而是这个范围&这个边界来自as u
修饰符应该如何将字符串视为UTF-16
echo PCRE_VERSION;
使用PHP 5.3.24 - 5.3.28、5.4.14 -5.5.7的PCRE版本:
8.32 2012-11-30
带有PHP 5.3.19 - 5.3.23、5.4.9 -5.4.13的PCRE版本:
8.31 2012-07-06
https://stackoverflow.com/questions/20954580
复制相似问题