2011-09-19 295 views
0

我有以下正則表達式用[IMG]替換html img標籤;PHP正則表達式用[IMG]替換html img標籤

echo preg_replace('/(^<img) (.*) (>$)/i', '[IMG]', $subject); 

它將按預期在一定程度上,但是部分的img標籤我的工作到底有「/>」和一些最終用「>」的。我無法得到以上與後者合作。

樣品1(作品):

<img src="image-1.gif" alt="image-1" width="175>" height="80" /> 

樣品2(不工作)

<img src="image-2.gif" width="77" height="51" alt="image-2"> 

欣賞的幫助。

+3

這就是爲什麼正則表達式是不是最佳的解析PHP。考慮使用HTML解析器。 [用PHP解析HTML的最佳方法](http://stackoverflow.com/q/3577641) –

+1

樣本1是否已經損壞了HTML,或者你的意思是...... ... width =「175」height =「80」/> ? – cypher

+0

其故意腐敗。 – Sid

回答

1

雖然佩卡說得對,你應該使用一個HTML解析器(我完全同意),用於教育的緣故,你可以使用「可選」字,?,這標誌着前一個字符作爲可選:

echo preg_replace('/(^<img) (.*)(\\\?>$)/i', '[IMG]', $subject); 

注意事項\\\?。我們避開反斜槓並提出marl(帶有反斜槓),然後說'這個字符是可選的'。

+0

我嘗試過,但沒有奏效。 – Sid

+0

我的不好,需要一個額外的逃生。現在工作。 – Alex

+0

謝謝你的傢伙,按預期工作。 – Sid

0

我會建議抓取網址,然後手動編寫[IMG]標籤。

例如

preg_match('/src="(.*?)"/', '<img src="image-2.gif" width="77" height="51" alt="image-2">', $matches) 
echo '[IMG]'.$matches[1].'[/IMG]'; 

曬。

0

我會嘗試使用DOM解析器。他們更可靠。

http://simplehtmldom.sourceforge.net/

+0

建議使用[SimpleHtmlDom](http://simplehtmldom.sourceforge.net/)的第三方替代方案,它實際使用[DOM](http://php.net/manual/en/book.dom.php)而不是字符串解析:[phpQuery](http://code.google.com/p/phpquery/),[Zend_Dom](http://framework.zend.com/manual/en/zend.dom.html),[QueryPath]( http://querypath.org/)和[FluentDom](http://www.fluentdom.org)。 – Gordon

相關問題