Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 替换正则表达式_Php_Regex_Preg Replace - Fatal编程技术网

Php 替换正则表达式

Php 替换正则表达式,php,regex,preg-replace,Php,Regex,Preg Replace,我正在研究一种将变量传递到通知中的方法,为了实现这一点,我目前正在使用以下方法浏览一次消息: private static function set($var, $content, &$message) { $message = str_replace("{{" . $var . "}}", $content, $message); } 这是正确匹配的;如果我在消息中有{name},并且我运行了下面的方法,{{name}的所有实例都正确地替换为“Johnny Test”。好极了

我正在研究一种将变量传递到通知中的方法,为了实现这一点,我目前正在使用以下方法浏览一次消息:

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',我希望传入一个默认值('No email address')(而不是显示'{email}}'的通知)

为此,我用以下方法调制:

但是,它并不完全匹配。它不是包含“未选择颜色”的
$returnValue
,而是包含“{color:“未选择颜色”}}”上的完整字符


我遗漏了什么?

你的反斜杠太多了。您使用的是单引号,因此单独使用
\
没有特殊意义

因此:

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

应该这样做。

你的反斜杠太多了。您使用的是单引号,因此单独使用
\
没有特殊意义

因此:

'/\{\{.*?:\s*[\'"](.*?)[\'"]\s*\}\}/'
应该可以。这应该可以:

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

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

哈哈,是的!事实证明,我使用的工具是添加了额外的反斜杠(我最终使用writecodeonline将其写出来,整个过程都成功了)。谢谢你发现了!哈哈,是的!事实证明,我使用的工具是添加了额外的反斜杠(我最终使用writecodeonline将其写出来,整个过程都成功了)。谢谢你发现了!这也是一个很好的解决方案!它使表达式更贪婪(或者更确切地说,不那么粗俗)。这也是一个很好的解决方案!它使表达式更贪婪(或者更确切地说,不那么粗俗)。