2011-09-19 291 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

相关问题