【问题标题】:PHP preg_replace_callback not replacing my "matches"PHP preg_replace_callback 没有替换我的“匹配”
【发布时间】:2013-01-17 03:59:01
【问题描述】:

为什么返回的是原始字符串而不是编辑后的字符串?

原始字符串:

I cant believe Ed ate [-food-] for breakfast.

替换:

preg_replace_callback('/\[\-[a-zA-Z0-9_]\-\]/', 'tag_func', $email_body);

function tag_func($matches){
     $matches[0] = 'tacos';
     return $matches[0];
}

结果所需的字符串:

I cant believe Ed ate tacos for breakfast.

这是我收到的警告:

preg_replace_callback(): Requires argument 2, 'tag_func', to be a valid callback 

【问题讨论】:

  • 我认为这可能与我的 php 版本有关,但我运行的是 5.3.3

标签: php regex preg-replace-callback


【解决方案1】:

您忘记添加+,所以它应该匹配多个字符:

preg_replace_callback('/\[-[a-z\d_]+-\]/i', 'tag_func', $email_body);
//                                 ^

在此处查看实际操作:http://codepad.viper-7.com/f94VPy


如果你运行的是 5.3,你可以直接给它传递一个匿名函数:

preg_replace_callback('/\[-[a-z\d_]+-\]/i', function () {
    return 'tacos';
}, $email_body);

这是演示:http://codepad.viper-7.com/NGBAIh

【讨论】:

  • 这对我也没有用。我已经添加了我不断收到的警告。有什么线索可以解决我的这个难题吗?
  • 我直接复制了你的演示,但它没有用......这很令人沮丧。
  • 好消息,这确实有效!我意识到我的问题以及我正在调用公共静态函数的事实。我最终使用了 array('Class Name', 'GetPlaceholderConverter') 并且效果很好!
猜你喜欢
  • 1970-01-01
  • 2014-05-08
  • 2021-01-26
  • 2011-06-02
  • 2013-03-17
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
相关资源
最近更新 更多