我正在为邮寄书籍和杂志制作求职信。我的数据库中有收件人的所有数据,并且我有 PHP 脚本来获取该数据并制作求职信。使用特殊字符来标记姓名应放置的位置等来撰写求职信的用户。
例如,为了撰写求职信,用户写道:
Dear [[last_name]],
please find attached book...
然后它被 PHP 脚本解析,并且 [[last_name]]
标签被替换为真实姓名。当选择 1000 个邮寄地址时,脚本会生成 1000 封求职信,每封都有不同的名称。
现在,在我的俄语中,“亲爱的”一词对于男性和女性有不同的结尾。就像我们在英语中说的“亲爱的先生”。或“亲爱的夫人。”
为了在求职信中标记,用户写下了该单词可能的结尾:
Dear[[oy/aya]] [[last_name]]
或者可能是这样的:
Dear[[ie/oe]]... etc.
我正在尝试找出 PHP 脚本的正则表达式和替换命令来解析此类行。
对于我使用的last_name标签:
$text = ...//this is text of the cover letter with all the tags.
$res = $mysqli->query("SELECT * FROM `addresses` WHERE `flag` = 1")
while ($row=$res->fetch_assoc()) {
$text = str_replace('[[last_name]]', $row['lname'], $text);
echo $text;
}
据我了解,词尾应该是这样的:
$text = preg_replace('/\w{2-3}\//\w{2-3}/', ($row['gender']==1)
? 'regexp(first_half)'
: 'regext(second_half)', $text);
我可以通过循环浏览标签、解析它并替换来实现整个想法,但这需要 5-10 行代码。我确信这可以通过上面的行来完成,但我不知道如何实现。
最佳答案
参见http://www.phpliveregex.com/p/2BC然后男性替换为 1 美元,女性替换为 2 美元 ...
preg_replace('~\[\[(.+?)/(.+?)\]\]~', $row['gender']==1?'$1':'$2', $text);
关于php - 制作一行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20597474/