PCRE无法匹配某些UTF-8字符与\ X转义序列

时间:2013-06-02 02:19:21

标签: php utf-8 character-encoding pcre

我正在对UTF-8和PCRE进行一些测试,发现以下正则表达式无法匹配某些字符,例如E1 8D 9F(字符)。

return preg_match_all( '/\X/u' , $string , $matches , PREG_SET_ORDER );

$string是一个UTF-8字符。与许多字符一起使用,但我有一个代码点列表,使这个正则表达式失败。任何线索?

编辑:当我逐字节检查时,所有因上述正则表达式失败的字符看起来都非常有效。这是一个错误还是什么?

2 个答案:

答案 0 :(得分:1)

它可能是您的PHP版本中的错误 - 它在PHP 5.4中运行良好,但不是所有以前的版本。这是online code sampling的工作原理。

顺便说一句,这个答案是基于假设你的意思是character U+135F,其utf-8编码为0xE1 0x8D 0x9F。

http://www.fileformat.info/info/unicode/char/135F/index.htm

答案 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。