正则表达式替换

时间:2014-02-18 23:48:31

标签: php regex preg-replace

我正在研究一种将变量传递给通知的方法,为了实现这一点,我目前使用以下方法对消息进行一次处理:

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包含“未选择颜色”,而是包含完整的“{{颜色:”无颜色选择“}}'。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

你有太多的反斜杠。你正在处理单引号,所以\没有特别的意义。

因此:

'/\{\{.*?:\s*[\'"](.*?)[\'"]\s*\}\}/'

应该这样做。

答案 1 :(得分:2)

这应该有效:

$returnValue = preg_replace(
    '/{{[^:]*:\s*[\'"]([^\'"]*)[\'"]\s*}}/',
    '$1', 
    '{{color : "No color selected"}}'
);