在php电子邮件阅读课中的preg_match

时间:2014-02-11 22:07:58

标签: php regex email preg-match flourishlib

我刚刚遇到preg_match(这是谎言,我一直在躲避瘟疫)...现在我必须在我一直使用的库中修复表达式。

有问题的图书馆蓬勃发展,我已经检查过,许可证是麻省理工学院,所以不用担心编辑源代码。我目前只使用fMailbox类,并编辑该类以允许使用从不同文件夹中获取电子邮件。原版不是为此设计的,并且具有语法:

$messages = $mailbox->listMessages($limit,$page);
$messages = $mailbox->listMessages(5,0); // for example - the first 5 emails in the inbox

现在我正在编辑,以便我可以得到:

$messages = $mailbox->listMessages($limit,$page = NULL, $sortorder, $folder);

看起来其他人做了同样/类似的事情我已经让$ sortorder工作但是当更改文件夹(例如:'[Google Mail] / Sent Items')时,以下preg_match没有得到任何匹配和我得到错误的信息(如果folder ='INBOX',它可以正常工作);

if (preg_match('#^\s*\*\s+STATUS\s+"?'.$folder.'"?\s+\((.*)\)$#', $line, $match)) {}
// where $folder = '[Google Mail]/Sent Mail'

它应该看的字符串($ line)是:'* STATUS“[Google Mail] / Sent Mail”(MESSAGES 528)'

如果我不得不猜测文件夹名称中的空格会导致它失败,但这确实是猜测。

有人可以通过preg_match来解释如何匹配字符串的'MESSAGES 528'部分吗?我认为这是让课程顺利完成的唯一问题。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

正则表达式是我的朋友;-)如果要将带有特殊字符的字符串集成到正则表达式模式中,则必须使用preg_quote。试试这个:

if (preg_match('#^\s*\*\s+STATUS\s+"?'.preg_quote($folder).'"?\s+\((.*)\)$#', $line, $match)) {}