用相应的值替换文本中的变量 - php

假设我有以下要作为电子邮件发送给客户的字符串。

"Hello Mr/Mrs {{Name}}. You have subscribed for {{Service}} at {{Date}}."

我有一个数组,应替换其值

array(
    'Name' => $customerName, //or string
    'Service' => $serviceName, //or string
    'Date' => '2015-06-06'
);

我可以这样找到{{..}}之间的所有字符串:

preg_match_all('/\{{(.*?)\}}/',$a,$match);

$ match是一个带有值的数组,但是我需要将每个匹配项替换为带有值的数组中的对应值

请注意,带有值的数组包含更多的值,并且数组中的项目数或键序列与字符串中的匹配数无关。

参考方案

您可以使用preg_replace_callback并在use的帮助下将数组传递给回调函数:

$s = "Hello Mr/Mrs {{Name}}. You have subscribed for {{Service}} at {{Date}} {{I_DONT_KNOW_IT}}.";
$arr = array(
    'Name' => "customerName", //or string
    'Service' => "serviceName", //or string
    'Date' => '2015-06-06'
);
echo $res = preg_replace_callback('/{{(.*?)}}/', function($m) use ($arr) {
       return isset($arr[$m[1]]) ? $arr[$m[1]] : $m[0]; // If the key is uknown, just use the match value
    }, $s);
// => Hello Mr/Mrs customerName. You have subscribed for serviceName at 2015-06-06.

请参见IDEONE demo。

$m[1]指的是(.*?)捕获的内容。我猜想这种模式对于当前情况已经足够了(不需要展开,因为它匹配的字符串相对较短)。

PHP preg_replace删除字符串中的第一个HTML元素 - php

我想在PHP中删除html字符串(始终是一个段落)的整个第一个元素。我目前的方法是使用:$passage = preg_replace('/.*?\b'.'</p>'.'\b/s', '', $passage, 1); 由于</p>中的特殊字符,此方法不起…

PHP:Preg_replace,单词边界和非单词字符 - php

我需要替换文本中以井号(#)开头的单词。好吧,我知道如何替换整个单词。preg_replace("/\b".$variable."\b/", $value, $text);由于该\ b修饰符仅接受单词字符,因此不会替换包含井号的单词。我有这个html,其中包含#companyName类型的变量,我将其替换为一个值。 参…

PHP preg_replace替换数字以及特殊字符 - php

我有以下PHP代码可从变量中删除特殊字符;<?php $name = "my%^$@#name8"; $patterns = array( '/\s+/' => '_', '/&/' => 'and', '/[^[:alph…

php preg_replace两个或更多空格 - php

我正在寻找替换多个空格字符的实例。我最初的搜索似乎都集中在使用/s,但这包括换行符和其他空格我认为应该接近吗?用一个空格替换两个或更多实例空格" "preg_replace('/ {2,}/', ' ', $string); 参考方案 尝试一下:preg_replace('/\s\s+/&…

PHP preg_replace修改 - php

我有一个表达式[text][id],应替换为链接<a href='id'>text</a>解决方案是(id是整数)$s = preg_replace("/\[([^\]]+)(\]*)\]\[([0-9]+)\]/","<a href='$3'>$1$2…