我有一个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);
它有效,但经过一些快速测试后,我意识到这个正则表达式真的慢。
我在正则表达方面不是那么好,有人可以看一下正则表达式&amp;告诉我如何优化它&amp;快点?
答案 0 :(得分:3)
您正在使用正则表达式来处理整个消息,这一定义很慢。更好的选择是使用适当的编程逻辑来处理消息。例如,逐行浏览消息并测试每一行是否与您的“签名开始”正则表达式匹配。如果没有,请将其添加到包含实际消息的数组或字符串中。如果匹配,请将其余信息添加到页脚。
如果您认为您的用户将在邮件中间使用与正则表达式匹配的行,您可能还想从底部而不是从顶部开始。
答案 1 :(得分:0)
假设签名以行首开头至少两个-
开头,并以\r\n
,\r
或\n
结束一次或多次,请尝试此操作:
$message = preg_replace(
'/^(-{2,})(?=(?:\r?\n|\r)+)/m',
'<span class="msg_footer">$1</span>',
$message
);