preg_replace - NULL结果?

时间:2009-09-16 20:09:52

标签: php pcre

这是一个小例子(下载,重命名为.php并在shell中执行):

test.txt

为什么preg_replace返回NULL而不是原始字符串?

\x{2192}与HTML“→”(“→”)相同。

4 个答案:

答案 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,请使用双引号“”)
  • 我不是UTF8专家,但转义码\x2192也不正确。您可以:\x21\x92将两个字节都放入字符串中,但您可能需要查看utf8_encodeutf8_decode
  • 您的源字符串中包含无效字符或其他内容。 PHP给出: 警告:preg_replace():编译失败:第7行test.php中偏移0处的UTF-8字符串无效

答案 3 :(得分:-3)

我相信您的正则表达式中也存在错误:~\x{2192}~u

尝试替换我所拥有的内容并查看是否适合您:/\x{2192}/u