2014-02-18 22 views
0

我工作的一種方式將變量傳遞到一個通知,而實現這一點的表情,我目前經歷的消息一旦與下面的方法:定期進行替代

private static function set($var, $content, &$message) { 
    $message = str_replace("{{" . $var . "}}", $content, $message); 
} 

這正確匹配;如果我在消息中包含「{{name}}」,並且運行以下方法,那麼所有「{{name}}」實例都將正確替換爲「Johnny Test」。燦爛。

self::set('name', 'Johnny Test', $message); 

我現在希望擴大這個允許沒有傳遞到通知模板場的可能性。也就是說,如果我需要「姓名」和「電子郵件」來接收特定通知,但只傳入了「姓名」,我需要傳入一個默認值('無電子郵件地址')(而不是通知顯示「 {電子郵件}}')。

爲此,我已經炮製使用this tool如下:

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

然而,這並不正確地匹配。而不是$returnValue包含「未選擇顏色」,而是包含全選「{{color:」未選擇顏色「}}」。

我錯過了什麼?

回答

2

反斜槓太多。你正在使用單引號,因此單獨使用\沒有特別的意義。

因此:

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

應該這樣做。

+0

哈哈,沒錯!事實證明,我正在使用的工具是添加額外的反斜槓(我最終使用writecodeonline寫出來,並且整個事情都奏效了)。謝謝你發現! –

2

這應該工作:

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

也是一個不錯的解決方案!它使表達更加貪婪(或者更確切地說,不那麼理性)。 –