【问题标题】:php - valid regEx expression in ereg_replace makes nothing [duplicate]php - ereg_replace 中的有效正则表达式没有任何作用[重复]
【发布时间】:2013-05-08 14:38:13
【问题描述】:

我使用的是 PHP 5.2.17。我想从 JSON 字符串中删除一些多余的数据,我认为我可以使用一些替换功能来做到这一点。具体来说,我将 ereg_replace 与下一个表达式一起使用:

'^.*?(?=\"created_at)'

我已在 http://www.regexpal.com 进行了验证。我已经将我的 JSON 字符串粘贴在那里并且匹配是正确的。但是,当我拨打电话时:

$tweets = eregi_replace('^.*?(?=\"created_at)', $temp, 'something');

然后我回显 $tweets 变量,有输出。控制台中也没有错误。但是,Apache 错误日志抱怨称为 REG_BADRPT 的错误。 eregi_replace 的 php 文档中有一条评论表明这可能是因为我需要转义特殊字符,但我已经转义了 " 字符。我试图转义其他人但没有不同的行为。

那么问题出在哪里?

【问题讨论】:

  • 请不要在PHP中使用ereg函数;它们已被弃用。你应该改用preg_replace()
  • 您确实应该使用json_decode 并删除您不需要的数据,然后将其编码回来。
  • $tweets = preg_replace('/^.*?(?=\"created_at)/', $temp, 'something');

标签: php regex posix-ere


【解决方案1】:

我认为ereg 不支持环视。 preg_replace 存在于 php 5.2 中,因此您应该真正使用它。它适用于带有分隔符的表达式。

$tweets = preg_replace('@^.*?(?=\"created_at)@i', 'something', $temp);

【讨论】:

  • 但是请注意,preg_replace 改变了参数的类型:它应该是preg_replace('@^.*?(?=\"created_at)@i', 'something', $temp);。由于这个提议不起作用,我花了整整一段时间才弄清楚发生了什么。
  • @JorgeAntonioDíaz-Benito 已修复问题;下次如果您包含要测试的字符串会有所帮助。
【解决方案2】:

正如其他人指出的那样,不推荐使用 ereg 函数,因此请使用 preg_replace。您还必须将正则表达式字符串封装在斜杠中 (/)。您可以将您的正则表达式标志放在最后一个斜杠之后。

【讨论】:

  • 虽然这不是所有提案之间最直接也不是最快的解决方法,但非常感谢您提供此信息,真的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
相关资源
最近更新 更多