2

我有一个 PHP 脚本,可以将我的邮件列表镜像到基于 Web 的论坛,为了使论坛导入看起来尽可能好,我使用正则表达式来捕获电子邮件签名并适当地设置它们的样式。我用正则表达式捕获的签名格式是:

This is my message...
--
My signature
TheDude.

This is my message...
---------------
My signature
TheDude.

现在我正在使用这个正则表达式:

$message = preg_replace('/\s*(.+)(\s*[\r\n]-{2,}\s+.*)/s', '$1<span class="msg_footer">$2</span>', $message);

它有效,但经过一些快速测试后,我意识到这个正则表达式真的很慢。

我在正则表达式方面不是很好,有人可以看看正则表达式并告诉我如何优化它并使其快速吗?

4

2 回答 2

3

您正在使用正则表达式来处理整个消息,这肯定会很慢。更好的选择是使用适当的编程逻辑来处理消息。例如,逐行浏览消息并测试每一行是否与您的“签名开始”正则表达式匹配。如果没有,请将其添加到包含实际消息的数组或字符串中。如果匹配,则将消息的其余部分添加到页脚。

如果您认为您的用户将在消息中间使用与您的正则表达式匹配的行,您可能还希望从底部而不是顶部开始。

于 2013-07-05T12:47:07.660 回答
0

假设一个签名在行首至少以两个-开头并以一个或一次或多次结尾,试试这个\r\n\r\n

$message = preg_replace(
               '/^(-{2,})(?=(?:\r?\n|\r)+)/m',
               '<span class="msg_footer">$1</span>',
               $message
           );
于 2013-07-05T12:45:20.277 回答