0

私は preg_match に出くわしたばかりです (それは嘘です、ペストのようにそれを避けてきました)..そして今、私が使用しているライブラリの式を修正する必要があります.

問題のライブラリは繁栄しており、ライセンスが MIT であることを確認したので、ソースを編集する心配はありません。現在、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)'

私が推測しなければならなかったのは、フォルダー名のスペースが失敗の原因であると推測しましたが、それは本当に推測です。

文字列の 'MESSAGES 528' 部分を preg_match で一致させる方法を誰かが親切に説明してくれませんか? これは、クラスを正常に機能させるために必要な唯一の問題だと思います。

どんな助けでも大歓迎です。

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 に答える