我正在整理一个电子邮件个性化库,因此对于 Mailchimp 和 Campaign Monitor 之类的电子邮件邮件程序,您可以设置一个特定的个性化设置,例如 [FNAME],它会将字符串替换为客户的名字。
如果我有如下文本:
$source = 'Hello [FNAME-fallback="there"]';
我想要做的是将 FNAME 替换为$customer->fname
是否存在,否则将其替换为后备。
困难在于,用户也可以输入,[FNAME]
然后它应该只尝试替换而没有任何回退,并且即使没有设置名字,也明显删除 [FNAME]。
我已经做到了:
$personalisations = array(
'FNAME',
'LNAME',
'CNAME'
);
$match = '/\[(?:' . implode('|', $personalisations) . ')(?:\-[\s]*fallback=\")*(.{0,})\"\]/i';
$replace = '$1';
$source = 'Hello [FNAME-fallback="there"]';
$text = preg_replace($match, $replace, $source);
该部分在用“there”替换 FNAME 时效果很好,但我需要考虑到可能没有'-fallback="there"'
给定的,如果它不是空的,我也需要用它替换它$customer->fname
。所以大概,我需要找到哪个它匹配为 $1 的个性化设置,然后设置:
$replace = !empty($customer->fname) ? $customer->fname : '$1'
还需要考虑它可能是 fname、lname 或 cname 等。
我不确定我是否会因为尝试在一个函数中执行全部任务而混淆问题,但实际上我需要最有效的方法,因为该函数将为每个客户一遍又一遍地运行。任何正则表达式英雄都可以用这个为我指明正确的方向吗?我想我走对了,但我无法理解最后一部分......
谢谢,
基督教