1

特定のアドレスに送信された電子メールメッセージをログに記録するものに取り組んでいます。情報をMySqlに入れるPHPスクリプトがあります。これは正常に機能しています。

Gmailと同様に、「会話」に基づいてメッセージをグループ化できる必要があります。これについては、すでに少し読んでいます。メッセージはWebサイトに表示される前に手動で承認され、エラーがあれば修正できるため、これは完全である必要はありません。新しい電子メールを元の電子メールにリンクすることが自動的に行われるように、できるだけ少ない作業量にしたいだけです。

私の理解では、In-Reply-Toヘッダーは元のメッセージを識別できますが、その使用は標準ではありません。

私はこれを別のページで見つけました:

The most common forms of In-Reply-To seemed to be:

31%     NAME's message of TIME <ID@HOST>
22%     <ID@HOST>
9%      <ID@HOST> from NAME at "TIME"
8%      USER's message of TIME <ID@HOST>
7%      USER's message of TIME
6%      Your message of "TIME"
17%     hundreds of other variants (average 0.4% each?)

ただし、これは、In-Reply-Toフィールドがある場合、そこにある最初の<>括弧で囲まれたテキストが親メッセージのメッセージIDであると想定するのは不合理ではないことを示しているようです。

それで、その値を取得する最も簡単な方法は何ですか?<中にあるものをすべて取得できる正規表現>はありますか?使用可能な場合はありますか?(私が見つけた投稿によると、これはa<と?内の最初の値である必要があり>ますか?)

あなたが提供できるどんな助けにも感謝します。

4

1 に答える 1

2

後方参照で最初の一致を取得できるはずです。

<(.+)>

説明:

//    Match the character “&lt;” literally «<»
//    Match the regular expression below and capture its match into backreference number 1 «(.+)»
//       Match any single character that is not a line break character «.+»
//          Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
//    Match the character “&gt;” literally «>»

このドキュメントによると、次のように記述して、やりたいことを実行できます(これが有効なphpでない場合は、ご容赦ください)。

$string ='blah blah blah <ID@HOST>';
preg_match('/<(.+)>/', $string, $match);
print_r($match);
于 2011-11-08T20:48:20.427 に答える