preg_match用于电子邮件的主题和正文

时间:2016-04-14 09:16:29

标签: php preg-match

我需要提取Joomla中表单生成的电子邮件的主题/正文。 我使用一些标签来定义每种语言的不同主题/正文,例如:

{lang en}English Text{/lang}
{lang it}Italian Text{/lang}
{lang fr}French Text{/lang}

我有以下代码用于从不同语言的主题中分离文本:

$msgSubject = $template->subject;           
    if ($language=='it-IT')
    {                                               
    preg_match('~{lang it}([^{]*){/lang}~i', $msgSubject, $match);
    $msgSubject=($match[1]);
    }
    elseif ($language=='en-GB')
    {
    preg_match('~{lang en}([^{]*){/lang}~i', $msgSubject, $match);
    $msgSubject=($match[1]);
    }

等等其他语言。 它适用于电子邮件的主题,这只是纯文本。 如果我在Body上做同样的事情,这是一个包含像p和br这样的HTML元素的字符串,依此类推,它不起作用.... 代码示例:

$msgBody = $template->body;

                    if ($language=='it-IT')
                    {
                    preg_match('~{lang it}([^{]*){/lang}~i', $msgBody, $match);
                    $msgBody=($match[1]);

                    }
                     elseif ($language=='en-GB')
                    {
                    preg_match('~{lang en}([^{]*){/lang}~i', $msgBody, $match);
                    $msgBody=($match[1]);
                    }

它根本不输出任何东西。我应该在preg_match函数中更改什么以避免使用HTML标记进行批量处理?

2 个答案:

答案 0 :(得分:2)

我已经检查了你的代码,它也可以正常使用html代码。但我认为$ msgBody包含与joomla一起使用的多个标签。 所以你应该使用下面的代码

preg_match_all('~{lang it}([^{]*){/lang}~i', $msgBody, $match);

因为preg_match仅匹配第一次出现。

答案 1 :(得分:1)

点击preg_match_all
这是你想要的吗?对我有用..

http://www.phpliveregex.com/p/fkB

编辑: 如果你喜欢这样:
http://www.phpliveregex.com/p/fkF
你也掌握了这种语言而且你不需要ifs。