首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成一行正则表达式

生成一行正则表达式
EN

Stack Overflow用户
提问于 2013-12-15 17:25:06
回答 2查看 107关注 0票数 2

我在为邮寄书籍和杂志写求职信。我在数据库中有所有收件人的数据,我有PHP脚本获取这些数据并制作求职信。写求职信的用户,用特殊的字符来标记名字的位置等等。

例如,为了撰写一封求职信,用户写道:

亲爱的[last_name], 请找到附加的书..。

然后,它被PHP解析,[[last_name]]标记被替换为实名。当选择1000个地址供邮寄时,脚本生成1000个求职信,每个封信都有不同的名称。

现在,在我的俄语中,“亲爱的”一词对男性和女性有不同的结尾。就像我们在英语上说的“亲爱的先生。”或者“亲爱的夫人”

为了在求职信中标明这一点,用户为这个词写了可能的结尾:

亲爱的[欧/亚] [last_name]

也可以是这样的:

亲爱的.等。

我正在试图为我的PHP脚本找出正则表达式和替换命令来解析这类行。

对于我使用的last_name标记:

代码语言:javascript
复制
$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;
}

就我所知,结尾这个词应该是这样的:

代码语言:javascript
复制
$text = preg_replace('/\w{2-3}\//\w{2-3}/', ($row['gender']==1) 
  ? 'regexp(first_half)' 
  : 'regext(second_half)', $text);

我可以通过循环遍历标记、解析和替换来实现整个想法,但这将是5-10行代码。我确信这可以通过上面的线来完成,但我不知道如何做到。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-15 17:52:38

http://www.phpliveregex.com/p/2BC,然后你用1美元的男性和2美元的女性.

代码语言:javascript
复制
preg_replace('~\[\[(.+?)/(.+?)\]\]~', $row['gender']==1?'$1':'$2', $text);
票数 2
EN

Stack Overflow用户

发布于 2013-12-15 17:49:27

代码语言:javascript
复制
$gender = ($row['gender'] == 1) ? 1 : 2;
preg_replace_callback('#\[\[(?:([^\]/]+)(?:/([^\]/]+))?\]\]#',
    function($match) use ($row, $gender) {
        // $match will contain the current match info
        // $match[1] will contain a field name, or the first part of a he/she pair
        // $match[2] will be non-empty only in cases of he/she etc
        return (empty($match[2])) ? $row[$match[1]] : $match[$gender];
    }
);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20597474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档