2012-01-31 157 views
0

我想要得到這個如果語句如下: 如果第一個字符串位置是.png,然後從草垛獲得$ png1,但如果第一個字符串位置是.jpg,則獲取$從草垛JPG1,但如果.gif,而得到草垛$ GIF1,否則,如果他們沒有被發現,則字符串位置的.bmp因此獲得$ BMP1如果語句解析不正確

這是我嘗試過,但它不」噸正確解析:

<?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嗎? – 2012-01-31 21:11:16

+3

此代碼看起來不必要的複雜。你能發表你的意圖嗎? – Halcyon 2012-01-31 21:13:54

+0

保羅,是的,我抓住外部的HTML,但它是已知的某些規則已放到用戶將導致格式出現如預期的腳本。問題是它沒有得到正確的圖像,它只是緊跟着下面的代碼塊,就像上面發佈的代碼塊,除了一切都是爲了例如$ png2,$ jpg2等用於第二張圖片。上面的代碼是第一張圖片/ – 2012-01-31 21:30:12

回答

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]' – 2012-01-31 21:26:20

+0

@brinardsweeting:我已將您的示例添加到您的問題中。對於試圖回答問題細節是否全部存在問題的人來說,它是最容易的(否則,他們必須閱讀關於所有答案的所有評論以追查細節)。您可以通過點擊標籤下的「編輯」鏈接來編輯您的問題。 – derobert 2012-01-31 21:35:26

+0

是的,我忘了包括那些重要的細節,我通常不這樣做。謝謝 – 2012-01-31 21:46:15

0

文體提示:而不是多個正則表達式的唯一區別是文件擴展名,如何:

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

和剛剛捕獲的文件擴展名發現了什麼?這會節省你具有幾乎相同的正則表達式4份,做這一切在一個單一的tesing週期

+0

它如何知道用哪個圖像擴展名替換它?插入到$ html_part的多個'cid:'引用。我這樣做是爲了達到5張圖像的規則。所以最多可以用於例如$ png1,$ png2,$ png3,$ png4,$ png5。 使用您的代碼發佈後,代替圖像。當發現另一個圖像時,它會如何區分使用$ png2,$ jpg2?等等,併爲下一個發現的圖像.... $ png3,$ jpg3? – 2012-01-31 21:54:46

0

在你的代碼中的錯誤只是

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

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

- 設置$replace1,但您使用$replace