4

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

测试.txt

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

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

4

4 回答 4

5

当我的正则表达式包含u UTF-8 PCRE 修饰符时,我得到了一个空响应。如果你的源文本不是UTF 并且你有这个修饰符,你会得到一个空结果。

于 2013-08-29T14:20:51.330 回答
3

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)'
于 2009-09-16T21:19:13.583 回答
-1
  • 您正在使用单引号,这意味着您唯一可以转义的是其他单引号。启用转义序列(例如\x32,然后使用双引号“”)
  • 我不是 UTF8 专家,但转义码\x2192也不正确。您可以这样做:\x21\x92将两个字节都放入您的字符串中,但您可能想查看utf8_encodeutf8_decode
  • 您的源字符串中包含无效字符或其他内容。PHP 给出:警告:preg_replace():编译失败:第 7 行 test.php 中偏移量 0 处的无效 UTF-8 字符串
于 2009-09-18T00:56:38.463 回答
-3

我相信您的正则表达式也有问题:~\x{2192}~u

尝试更换我所拥有的,看看是否适合您:/\x{2192}/u

于 2009-09-16T21:35:59.220 回答