2012-01-18 173 views
0

我不是这个表达式字符串替换的好,但我觉得这个问题可以用得到解决......更换IMG标签

我要取代这个:

<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> 

我怎样才能使这项工作? (搜索关键词是“类=“aligncenter”,如果这在IMG标签存在,那么我需要更换)

可能有很多的IMG或标签更换,而不是只有一个!

谢谢你非常多!

+0

如果你不擅长与一定的技术,如果没有首先考虑更简单的选项,你不应该选择它。看到一些相关的链接。 – mario 2012-01-18 10:22:25

回答

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 reffers到整个匹配的文本

更换为<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); 
+0

非常感谢您的帮助! :)如果我只想'class ='aligncenter'fot这场比赛,我需要改变什么?(其余的可以不同) – VORiAND 2012-01-18 10:40:03

+0

@VORiAND尝试一段时间玩它,所以你会习惯它:)但基本上所有你需要的是用'“[^”] * aligncenter [^“] *”'替换'aligncenter size-full wp-image-112''(并且当你不需要' t需要更多的帮助) – Vyktor 2012-01-18 10:43:30

+0

我会尽力的!谢谢vyktor!) – VORiAND 2012-01-18 10:46:25