这是一个小例子(下载,重命名为 .php 并在你的 shell 中执行):
为什么preg_replace
返回 NULL 而不是原始字符串?
\x{2192}
与 HTML " →
" ("→") 相同。
当我的正则表达式包含u
UTF-8 PCRE 修饰符时,我得到了一个空响应。如果你的源文本不是UTF 并且你有这个修饰符,你会得到一个空结果。
从preg_replace()的文档中:
返回值
preg_replace() 如果主题参数是一个数组,则返回一个数组,否则返回一个字符串。
如果找到匹配项,将返回新的主题,否则主题将保持不变,如果发生错误则返回 NULL。
在您的模式中,我认为不支持 u 标志。错误的
编辑:这似乎是主题的某种编码问题。当我删除“147 3.2 V6 - GTA (184 kW)”并手动重新输入时,一切似乎都正常了。
编辑 2:在您提供的模式中,有 3 个空格似乎给正则表达式引擎带来了问题。当我将它们转换为十进制时,它们的值为 160(而不是普通空间 32)。当我用普通空间替换这些空间时,它似乎可以工作。
我用下面的下划线替换了有问题的空格:
'147 3.2 V6 - GTA (184 千瓦)' '147 3.2_V6 - GTA_(184_kW)'
\x32
,然后使用双引号“”)\x2192
也不正确。您可以这样做:\x21\x92
将两个字节都放入您的字符串中,但您可能想查看utf8_encode
和utf8_decode
我相信您的正则表达式也有问题:~\x{2192}~u
尝试更换我所拥有的,看看是否适合您:/\x{2192}/u