对数组使用 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'
正则表达式。
我知道有人在其他地方问过这个问题,但我找不到确切的情况(并理解它!)所以我希望有人可以在这里帮助编写代码。
需要进行一系列更改。简化为:
$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'
正则表达式。