对数组使用 preg_replace_callback

use preg_replace_callback with array

我知道有人在其他地方问过这个问题,但我找不到确切的情况(并理解它!)所以我希望有人可以在这里帮助编写代码。

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

$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);

我希望能回来 "Fred's girlfriend is called Tomasina" 但我会得到各种各样的东西,这取决于我如何调整代码 - none 其中有效!

我很确定我遗漏了一些非常明显的东西,所以如果我看不到它,我深表歉意!

谢谢!

有几个问题:

  • 在匿名函数中使用$change_to,而不是$array
  • 在模式周围使用正则表达式分隔符(例如 /...//\w+/
  • 如果 $change_to return 匹配值中没有这样的项目,否则,它将被删除(可以用 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' 正则表达式。