PHP-preg_replace_callback() 正则匹配模版信息并替换

版权声明:本文为博主原创文章,未经博主允许不得转载。 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.

*/

猜你喜欢

转载自blog.csdn.net/black_little_/article/details/84563441