我对这个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或标签需要替换,而不仅仅是一个!
非常感谢!!!
答案 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);