为什么跟随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
现在测试一些字符串后,我认为 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; //?\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n