php - 制作一行正则表达式

标签 php regex preg-replace

我正在为邮寄书籍和杂志制作求职信。我的数据库中有收件人的所有数据,并且我有 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/

相关文章:

php - 用 php 在推文中的链接周围包裹一个标签

php - 通过ip访问虚拟主机

php - mysql 中的嵌套选择

java - 时间条目的正则表达式验证

javascript - 我有输入文本框,应采用 $ 和 £ 货币符号,并在用户键入任何其他特殊字符时发出警告

php preg_replace 为每个捕获组分配不同的替换模式

php - PHP中如何去除特殊字符

PHP - WHERE Join 中的 MYSQL 未知列

javascript - 替换textarea换行符将文本保存到Mysql

PHP 字段验证 - (2 个字符后跟 6 个数字)示例 : bp125489