2012-03-15 45 views
0

更換正則表達式我想沒有「HTTP」作爲protocol..For實例中的所有圖像源之前,添加一個網址我一個不能被串在PHP

<?php 
$string ='<img src="image.jpg" alt=212><img src="http://upload.wikimedia.org/wikipedia/commons/e/e5/Raster_to_Vector_Mechanical_Example.jpg" alt=45>'; 
$pattern = '/(<img src=)\"[^http]/i'; 
$content = preg_replace($pattern, 'new_content', $string); 
var_dump($content); 
?> 

以前的腳本返回

string(132) "new_contentmage.jpg" alt=212&gt;<img src="http://upload.wikimedia.org/wikipedia/commons/e/e5/Raster_to_Vector_Mechanical_Example.jpg" alt="45">" 

它已經能夠識別圖像源不是以「http」開始,但它已經在相匹配的源名稱的下一個字符,「我」在image.jpg文件,並以「NEW_CONTENT」文字替換它。 。

H我可以添加字符串而不覆蓋源名稱的第一個字符。

問候

回答

1

您需要使用negative lookahead

$pattern = '/<img src=\"(?!http)/i'; 

這是因爲[^http]不會做你認爲它;它實際上恰好匹配一次任何字符不是h,或不是t,或不是p。由於全部爲個字符滿足此條件,所以第一個字符iimage.jpg匹配。

See it in action

+0

不完全。 '[^ http]'是一個單獨的字符,它是'不是','不是'和'不是'。 '^'顛倒了整個字符類,而不僅僅是其中列出的第一個字符。 – 2012-03-15 20:16:12

+0

@MarcB:糟糕 - 現在那是一個愚蠢的時刻。修好了,謝謝你的收穫。 – Jon 2012-03-15 20:17:23