0

我刚刚遇到 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 没有得到任何匹配,我得到了错误信息(如果文件夹 = '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”部分吗?因为我认为这是我必须让课程成功工作的唯一问题。

任何帮助深表感谢。

4

1 回答 1

0

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

if (preg_match('#^\s*\*\s+STATUS\s+"?'.preg_quote($folder).'"?\s+\((.*)\)$#', $line, $match)) {}
于 2014-02-11T22:22:13.553 回答