2012-01-31 12 views
0

この最初の文字列の位置が.pngの場合は 、次にhaystackから$ png1を取得しますが、最初の文字列の位置が.jpgの場合は$ haystackのjpg1ですが、.gifの場合はhaystackから$ gif1を取得し、そうでなければ文字列の位置は.bmpです。$ bmp1を取得します。文の構文解析が正しくない場合

これは私が試したものですが、 tは正しく解析:

<?php 
// if first occurence is .png get $png1 needle from haystack 
if (preg_match('#cid:([^"@]*)[email protected]([^"]*)#', $html_part))   
{   $find = '#cid:([^"@]*)[email protected]([^"]*)#'; 
    $replace1 = $png1; 
    $html_part = preg_replace($find, $replace, $html_part); 
} 
// if first occurence is .jpg get $jpg1 needle from haystack 
elseif (preg_match('#cid:([^"@]*)[email protected]([^"]*)#', $html_part)) 
{   $find = '#cid:([^"@]*)[email protected]([^"]*)#'; 
    $replace1 = $jpg1; 
    $html_part = preg_replace($find, $replace, $html_part); 
} 
// if first occurence is .gif then get $gif1 needle from haystack 
elseif (preg_match('#cid:([^"@]*)[email protected]([^"]*)#', $html_part)) 
{   $find = '#cid:([^"@]*)[email protected]([^"]*)#'; 
    $replace = $gif1; 
    $html_part = preg_replace($find, $replace, $html_part); 
} 
// if first occurence is .bmp then get $bmp1 needle from haystack 
else 
{   $find = '#cid:([^"@]*)[email protected]([^"]*)#'; 
    $replace = $bmp1; 
    $html_part = preg_replace($find, $replace, $html_part); 
} 
?> 

$html_partを、表示のために追加の改行と、次のとおりです。

<b>Bold Text.</b> <i>Italicized Text.</i> <u>Underlined Text.</u> Plain Unformatted Text. 
<img width=183 height=183 id="Picture_x0020_3" src="cid:[email protected]" 
alt="Description: Description: Description: cid:[email protected]"> 
<img width=153 height=145 id="Picture_x0020_2" src="cid:[email protected]" 
alt="Description: Description: cid:[email protected]"><img width=182 height=123 
id="Picture_x0020_1" src="cid:[email protected]" 
alt="Description: Description: cid:[email protected]">` 
+0

'正しく解析されません。あなたは未知の外部HTMLをつかんでいますか? –

+3

このコードは不必要に畳み込まれているように見えます。あなたはあなたの意図を投稿できますか? – Halcyon

+0

ポール、はい私は外部HTMLをつかんでいますが、スクリプトによって期待どおりにフォーマットが出るような特定のルールがユーザに提供されていることが知られています。問題は、正しい画像が得られないということです。すべてが上記のようなものを除いて、次のブロックのコードにちょうど従います。 $ png2、$ jpg2などを2番目の画像に追加します。上のコードは最初の画像/ –

答えて

0

あなたの正規表現が正しく含まれていない場合は、 '#'を '/'に置き換えてください。したがって、このように:

preg_match('/cid:([^"@]*)[email protected]([^"]*)/', $html_part) 

UPDATE

私のミス、あなたの正規表現は結構です。私はもう一度見ます。

$html_partの例を提供できますか?

+0

$ html_partの例: 太字。イタリック体のテキスト。下線付きテキスト。プレーンフォーマットされていないテキスト。 Description: Description: Description: cid:[email protected]Description: Description: cid:[email protected]Description: Description: cid:[email protected]「 –

+0

@brinardsweeting:あなたの質問にあなたの例を追加しました。質問の詳細がすべて質問に含まれている場合は、回答しようとする人にとって最も簡単です(そうでなければ、すべての回答のすべてのコメントを読んで詳細を追跡する必要があります)。タグの下にある「編集」リンクをクリックすると、質問を編集できます。 – derobert

+0

さて、そのような重要な情報を含めるのを忘れていました。ありがとうございます –

0

文体ヒント:代わりに、唯一の違いは、ファイルの拡張子で、どの程度の複数の正規表現の:

if (preg_match('#cid:([^"@]*).(gif|png|jpg|bmp)@([^"]*)#', $html_part)) { 
    $find = '#cid:([^"@]*).{$html_part[2]}@([^"]*)#'; 
          ^^^^^^^^^^^^^^^---captured file extension 

だけ見つかったファイルの拡張子をキャプチャ?それはあなたのコードで

+0

どのようにそれを置き換えるイメージの拡張子を知っていますか? $ html_partに複数の 'cid:'参照が挿入されています。私はこれを、最大5枚の画像のセットルールに対して実行しています。例えば、 $ png1、$ png2、$ png3、$ png4、$ png5である。 投稿したコードを画像に置き換えて使用する。別のイメージが見つかると、$ png2、$ jpg2を使用するように区別する方法をどのように知ることができますか?次の画像を見つけるために.... $ png3、$ jpg3? –

0

エラーがちょうど

$replace1 = $png1; 
    $html_part = preg_replace($find, $replace, $html_part); 

$replace1 = $jpg1; 
    $html_part = preg_replace($find, $replace, $html_part); 

ある単一tesingサイクルでそれをすべて行う、あなたはほぼ同じ正規表現の4つのコピーを持つ保存したい - あなたが設定します$replace1ですが、$replaceを使用しています。

関連する問題