我正在研究一种将变量传递给通知的方法,为了实现这一点,我目前使用以下方法对消息进行一次处理:
private static function set($var, $content, &$message) {
$message = str_replace("{{" . $var . "}}", $content, $message);
}
这正确匹配;如果我在消息中有“{{name}}”并运行以下方法,则“{{name}}”的所有实例都会被“Johnny Test”正确替换。出色。
self::set('name', 'Johnny Test', $message);
我现在想要扩展它以允许模板字段不被传递到通知中。也就是说,如果我需要'name'和'email'来获取特定通知,但只传入'name',我想传入一个默认值('无电子邮件地址')(而不是显示'{的通知{电子邮件}}“)。
为此,我使用this tool:
编造了以下内容$returnValue = preg_replace(
'/\\{\\{.*?\\:\\s*?[\'"](.*?)[\'"]\\s*?\\}\\}/',
'$1',
'{{color : "No color selected"}}'
);
但是,它没有正确匹配。而不是$returnValue
包含“未选择颜色”,而是包含完整的“{{颜色:”无颜色选择“}}'。
我错过了什么?
答案 0 :(得分:2)
你有太多的反斜杠。你正在处理单引号,所以\
没有特别的意义。
因此:
'/\{\{.*?:\s*[\'"](.*?)[\'"]\s*\}\}/'
应该这样做。
答案 1 :(得分:2)
这应该有效:
$returnValue = preg_replace(
'/{{[^:]*:\s*[\'"]([^\'"]*)[\'"]\s*}}/',
'$1',
'{{color : "No color selected"}}'
);