我正在对UTF-8和PCRE进行一些测试,发现以下正则表达式无法匹配某些字符,例如E1 8D 9F
(字符፟
)。
return preg_match_all( '/\X/u' , $string , $matches , PREG_SET_ORDER );
$string
是一个UTF-8字符。与许多字符一起使用,但我有一个代码点列表,使这个正则表达式失败。任何线索?
编辑:当我逐字节检查时,所有因上述正则表达式失败的字符看起来都非常有效。这是一个错误还是什么?
答案 0 :(得分:1)
它可能是您的PHP版本中的错误 - 它在PHP 5.4中运行良好,但不是所有以前的版本。这是online code sampling的工作原理。
顺便说一句,这个答案是基于假设你的意思是character U+135F,其utf-8编码为0xE1 0x8D 0x9F。
答案 1 :(得分:1)
PHP文档说\X
等同于(?>\PM\pM*)
。
我相信U + 135F与此不符。
见http://php.net/manual/en/regexp.reference.unicode.php
自PCRE 8.32起,\X
匹配Unicode对扩展字形集群的定义。
见http://bugs.exim.org/show_bug.cgi?id=1279
PHP5.4.14包括PCRE 8.32。