2013-11-15 178 views
0

我試圖正則表達式src屬性(沒有它的內容/值),並將其替換爲別的東西。正則表達式屬性標記

它也必須驗證HTML標籤(在本例中爲img)。

測試數據例如:

<img src="http://example.com" class="something" /> 

現在我需要獲得唯一的 「SRC」 和替換它。是否有可能將它作爲首先/唯一匹配PHP中的lookbehind/lookahead?

+0

不要在html上使用正則表達式。使用[DOM](http://php.net/dom) –

回答

1

您的意思是?

preg_replace('/(<img[^>]*src=")[^"]*"/', '$1'.$new.'"', $html) 

後視是不可能的,因爲它不能變長。

+0

事實上,你不能使用lookbehind(可變長度的原因),但你可以使用'\ K'功能來刪除所有匹配匹配結果,例如:'] * src =「\ K [^」] *(?=「)'那麼您的替換字符串只是:'$ new' –

1

正則表達式不應該用於解析html。
相反,修改DOM來做你需要的。

$doc = new DOMDocument(); 
$doc->loadHTML('<img src="http://example.com" class="something" />'); 
$images = $doc->getElementsByTagName('img'); 
foreach ($images as $image) { 
    $image->setAttribute('src','http://www.google.com'); 
    echo htmlentities($doc->saveHTML($image)); 
}