0

メールヘッダーを解析していて、「boundary=...」パラメーターを探しています。

$content = '..Content-Type: multipart/alternative;
    boundary="----=_NextPart_000_10CD_01CD3CB2.7C22E7C0"
X-Mailer: Microsoft CDO for Windows 2000..'

以下を使用していますが、どれも機能しません。

    $boundary = preg_replace('#(.*)boundary="(.*)"(.*)#is',"$2",$content);

    $boundary = preg_replace('#boundary="(.*)"#i',"$2",$content);

最初の行は次を返します。

NextPart_000_10CD_01CD3CB2.7C22E7C0"
X-Mailer: Microsoft CDO for Windows 2000

2番目のもの:

Content-Type: multipart/alternative;
    ----=_NextPart_000_10CD_01CD3CB2.7C22E7C0
X-Mailer: Microsoft CDO for Windows 2000

2 行目が何をするのかを理解しており、それが正しく行われています。しかし、最初の行が2番目の二重引用符を解析していない間はわかりません。何か案が?

4

3 に答える 3

1
preg_match('/boundary="([^"]+)"/m', $content, $m);
echo $m[1]; // ----=_NextPart_000_10CD_01CD3CB2.7C22E7C0
于 2012-05-28T15:13:35.163 に答える
0

ネガティブマッチャーを使用して最終的に解決できました [^"]*

$boundary = preg_replace('#(.*)boundary="([^"]*)(.*)#is',"$2",$content);

それでも、誰かが私の質問に対する答えを知っていれば、それはありがたいです. s 修飾子で使用される (.*) の動作がよくわかりません

于 2012-05-28T15:09:00.720 に答える
0

あなたの自己回答であなたの質問に答えて:

.*修飾子と一緒に使用すると、s改行iircも含まれます。

http://us3.php.net/manual/en/reference.pcre.pattern.modifiers.php

s (PCRE_DOTALL)

この修飾子が設定されている場合、パターン内のドット メタ文字は、改行を含むすべての文字に一致します。それがない場合、改行は除外されます。この修飾子は、Perl の /s 修飾子と同等です。[^a] などの否定的なクラスは、この修飾子の設定に関係なく、常に改行文字に一致します。

于 2012-05-28T15:35:25.283 に答える