版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/black_little_/article/details/84563441
preg_replace_callback()
— 执行一个正则表达式搜索并且使用一个回调进行替换
/***
* 匹配替换模版信息
* @param $template //要匹配的魔板信息
* @param $key_value_pair //要替换的内容
* @return string|null
*/
function message($template, $key_value_pair)
{
if(empty($template)) {
return null;
}
return preg_replace_callback("|\{\{([a-zA-Z_]+)\}\}|", function($matches) use ($key_value_pair) {
$key = $matches[1];
if(array_key_exists($key, $key_value_pair)){
return $key_value_pair[$key];
}
return $key.'?';
}, $template);
}
//Example
$template = 'Hello my name is {{name}}, I'm {{age}} years old';
$key_value_pair = array('name' => 'Lowemuo', 'age' => 18);
echo message($template,$key_value_pair);
在php手册里看到的另一种用法
$format = <<<SQL
CREATE DATABASE IF NOT EXISTS :database;
GRANT ALL PRIVILEGES ON :database_name.* TO ':user'@':host';
SET PASSWORD = PASSWORD(':pass');
SQL;
$args = ["database"=>"people", "user"=>"staff", "pass"=>"pass123", "host"=>"localhost"];
preg_replace_callback("/:(\w+)/", function ($matches) use ($args) {
return @$args[$matches[1]] ?: $matches[0];
}, $format);
/*
Result:
CREATE DATABASE IF NOT EXISTS people;
GRANT ALL PRIVILEGES ON :database_name.* TO 'staff'@'localhost';
SET PASSWORD = PASSWORD('pass123');
The `:database_name` placeholder doesn't exist as a matching key in `$args` so it's returned as is.
This way you know you need to correct the array by adding the "database_name" item.
*/