2010-09-16 67 views
1

我正在使用PHP(5.2)从MySQL数据库创建一些RSS提要,专门用于通过AppMakr制作的iPhone应用程序。使用Reg表达式来重新格式化RSS图像中的图像

他们从网站上的文章中获得,其中包含嵌入在其中的图像,但是在Feed中他们看起来不太好。我想要尝试做的是每当<p>中有一个图像环绕它时,它们都在自己的行中,并且不要试图环绕文章文本。

一个图像的格式是这样的:

<a rel="lightbox" href="http://images.domain.comk/543/image1.jpg"><img class="imageright" src="http://images.domain.comk/543/image1.jpg" alt="" width="300" height="250" /></a> 

因此,基本上与<a href>和与类“imageright”或“imageleft”包围。

我很想改变这种的是:

<p><img src="http://images.domain.comk/543/image1.jpg" alt="" width="300" height="250" /></p> 

基本上消除了href和imagexxxx类和p标签周围。

我在想,preg_replace将不得不使用prob,但是对于我实际使用它的内容会有所损失。任何帮助非常感谢。

+0

花费一些时间来了解更多关于正则表达式是一个不错的主意。如果你不明白表达式在做什么,使用示例可能会导致难以解决的错误。 – 2010-09-16 14:44:56

+0

如果我正确地阅读了你的内容,是不是更好地了解如何将图像url存储到你的数据库中?例如http://images.domain.comk/543/image1.jpg – Cups 2010-09-16 14:45:07

+0

是的,独立存储图像URL是deff未来的方式,但是我必须迎合在此之前编写的几千篇文章! – 2010-09-16 15:19:44

回答

1

所以,你需要使用正则表达式像这样一个匹配:

<a(.*)><img(.*)class="imageright" (.*)></a> 

然后一个代替正则表达式是这样的:

<p><img$2$3></p> 

这还不是最灵活的一个,但它应该做preg_replace()的技巧

+0

非常感谢大家,结合使用帮助我设法解决了所需的RegEx,我最终使用了:'$ imagePattern ='/ /'; $ imageReplacement ='

'; $ intro = preg_replace($ imagePattern,$ imageReplacement,$ intro);' – 2010-09-16 15:08:45

0

这个正则表达式匹配特定HTML标记的开始和结束对。标签之间的任何内容都存储在第一个捕获组中。

'<%TAG%[^>]*>(.*?)</%TAG%>' 

这给了我们一个出发点。现在,我们需要更换<a href></a><p></p>

PHP提供了一种简单的方法来做到这一点的preg_replace()

preg_replace ($pattern, $replacement, $text); 

现在只需要插入正确的价值观:

$patterns = '<%a%[^>]*>(.*?)</%a%>'; 
$replacement = '<%p%[^>]*>(.*?)</%p%>'; 
$text = ' <a rel="lightbox" href="http://images.domain.comk/543/image1.jpg"><img class="imageright" src="http://images.domain.comk/543/image1.jpg" alt="" width="300" height="250" /></a>'; 

echo preg_replace ($pattern, $replacement, $text); 

这是一个非经过测试的示例,旨在用作模式。在创建解决方案之前,您应该阅读http://www.php.net/manual/en/function.preg-replace.php