这是一个小例子(下载,重命名为.php并在shell中执行):
为什么preg_replace
返回NULL而不是原始字符串?
\x{2192}
与HTML“→
”(“→”)相同。
答案 0 :(得分:4)
当我的正则表达式包含u
UTF-8 PCRE modifier时,我的回复为空。如果您的源文本不是 UTF且您有此修饰符,则会得到一个空结果。
答案 1 :(得分:2)
来自preg_replace()的文档:
返回值
preg_replace()返回一个数组 subject参数是一个数组,或者a 否则就是字符串。
如果找到匹配项,则为新主题 将被退回,否则将被录取 将返回不变或 NULL如果 发生错误。
在你的模式中,我认为不支持你的旗帜。 错误
编辑:这似乎与主题有某种编码问题。当我擦除'147 3.2 V6 - GTA(184 kW)'并手动重新输入时,一切似乎都有效。
编辑2:在您提供的模式中,有3个空格似乎给正则表达式引擎带来了问题。当我将它们转换为十进制时,它们的值是160(而不是正常空间32)。当我用正常的空间替换这些空间时,它似乎有效。
我用下面的下划线替换了有问题的空格:
'147 3.2 V6 - GTA (184 kW)' '147 3.2_V6 - GTA_(184_kW)'
答案 2 :(得分:-1)
\x32
,请使用双引号“”)\x2192
也不正确。您可以:\x21\x92
将两个字节都放入字符串中,但您可能需要查看utf8_encode
和utf8_decode
答案 3 :(得分:-3)
我相信您的正则表达式中也存在错误:~\x{2192}~u
尝试替换我所拥有的内容并查看是否适合您:/\x{2192}/u