对数组使用preg_replace_callback

时间:2018-11-23 15:29:19

标签: arrays preg-replace-callback

我知道这已经在其他地方提出来了,但是我找不到确切的情况(并理解它!),所以我希望有人可以在这里提供代码帮助。

需要进行一系列更改。简化为:

$title = "Tom's wife is called Tomasina";

$change_to = array(
   "Tom"        => "Fred",
   "wife"       => "girlfriend",
);

$title = preg_replace_callback('(\w+)', function( $match )use( $change_to ) {
    return $array[$match[1]];
}, $title);

我希望找回“弗雷德的女友叫Tomasina”,但根据我如何调整代码,我得到了各种各样的东西-都不起作用!

我可以肯定我遗漏了一些显而易见的东西,如果看不到,我深表歉意!

谢谢!

1 个答案:

答案 0 :(得分:1)

有几个问题:

  • 在匿名函数中使用$change_to,而不是$array
  • 在模式周围使用正则表达式定界符(例如/...//\w+/
  • 如果$change_to中没有这样的项目,则返回匹配值,否则它将被删除(可以使用isset($change_to[$match[0]])进行检查)。

使用

$title = "Tom's wife is called Tomasina";

$change_to = array(
   "Tom"        => "Fred",
   "wife"       => "girlfriend",
);

$title = preg_replace_callback('/\w+/', function( $match ) use ( $change_to ) {
    return isset($change_to[$match[0]]) ? $change_to[$match[0]] : $match[0];
}, $title);
echo $title;
// => Fred's girlfriend is called Tomasina

请参见PHP demo

此外,如果您的字符串可以包含任何Unicode字母,请使用'/\w+/u'正则表达式。