PHP Preg引擎中的错误:环顾Unicode问题

PHP*_*Pst 7 php regex

为什么跟随js代码字:

"???@".replace(/(?=.)/g,'!'); // returns: ""!?!?!?""
Run Code Online (Sandbox Code Playgroud)

但它的PHP等效回报'!?!?!?!?!?!?'

preg_replace('/(?=.)/u', '!', '???'); //returns '!?!?!?!?!?!?'
Run Code Online (Sandbox Code Playgroud)

这仅适用于4.3.5 - 5.0.5,5.1.1 - 5.1.6版本.

见:http://3v4l.org/jrV0W

PHP*_*Pst 1

现在测试一些字符串后,我认为 PREG 引擎中有一个错误。前三行输出符合预期,但第四行有故障。

\n\n
<?php\necho preg_replace('/./'       , '#', '\xd8\xa2\xd8\xb1\xd8\xaf')   . PHP_EOL; //\xe2\x9c\x93\necho preg_replace('/./u'      , '#', '\xd8\xa2\xd8\xb1\xd8\xaf')   . PHP_EOL; //\xe2\x9c\x93\necho preg_replace('/(?=.)/'   , '#', '\xd8\xa2\xd8\xb1\xd8\xaf')   . PHP_EOL; //\xe2\x9c\x93\necho preg_replace('/(?=.)/u'  , '#', '\xd8\xa2\xd8\xb1\xd8\xaf')   . PHP_EOL; //\xe2\x9c\x97\necho preg_replace('/(?=\\pL)/' , '#', '\xd8\xa2\xd8\xb1\xd8\xaf')   . PHP_EOL; //?\necho preg_replace('/(?=\\pL)/u', '#', '\xd8\xa2\xd8\xb1\xd8\xaf')   . PHP_EOL; //?\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出:

\n\n
######\n###\n#\xef\xbf\xbd#\xef\xbf\xbd#\xef\xbf\xbd#\xef\xbf\xbd#\xef\xbf\xbd#\xef\xbf\xbd\n#\xef\xbf\xbd#\xef\xbf\xbd#\xef\xbf\xbd#\xef\xbf\xbd#\xef\xbf\xbd#\xef\xbf\xbd\n#\xd8\xa2#\xd8\xb1#\xd8\xaf\n#\xd8\xa2#\xd8\xb1#\xd8\xaf\n
Run Code Online (Sandbox Code Playgroud)\n