替换IMG标签

时间:2012-01-18 10:10:53

标签: php regex

我对这个REGEX字符串替换不太好,但我认为这个问题可以通过这个来解决......

我想替换它:

<a href="http://www.example.com">
<img alt="" class="aligncenter size-full wp-image-112" height="300" src="http://www.example.comsample1.png" title="sample1" width="300" /></a>

用这个:

<p style="text-align:center;"><a href="http://www.example.com">
<img alt="" class="aligncenter size-full wp-image-112" height="300" src="http://www.example.comsample1.png" title="sample1" width="300" /></a></p>

和这(如果没有给出链接):

<img alt="" class="aligncenter size-full wp-image-112" height="300" src="http://www.example.comsample1.png" title="sample1" width="300" />

用这个:

<p style="text-align:center;">
<img alt="" class="aligncenter size-full wp-image-112" height="300" src="http://www.example.comsample1.png" title="sample1" width="300" /></p>

我怎样才能做到这一点? (搜索关键字是'class =“aligncenter',如果它存在于IMG标签中,那么我需要替换)

可能有许多IMG或标签需要替换,而不仅仅是一个!

非常感谢!!!

1 个答案:

答案 0 :(得分:3)

你可能需要两个正则表达式,一个用于img(确保在<a标记之前或之后没有<img />,那就是look ahead,你需要负向前看断言所以它看起来像这样:

$text = preg_replace( '~<img alt="" class="aligncenter size-full wp-image-112"([^<>]+)/>\s*(?!</a)~mi', '<p style="text-align:center;">\0</p>', $text);

m会匹配\s*中的新行,i会使正则表达式不区分大小写,\0会引用整个匹配的文本

<a ...><img />的替换类似:

$text = preg_replace( '~<a href="([^"]+)"><img alt="" class="aligncenter size-full wp-image-112"([^<>]+)/>\s*</a>~mi', '<p style="text-align:center;">\0</p>', $text);
相关问题