关于preg_replace的问题

时间:2011-09-17 03:22:08

标签: php preg-replace

我需要做一个preg_replace:

<p><img class="mceItem" src="http://img.youtube.com/vi/PZVfZ9TmW6w/0.jpg" alt="PZVfZ9TmW6w" width="306" height="229" /></p>

并将其替换为:

<iframe width="560" height="345" src="http://www.youtube.com/embed/PZVfZ9TmW6w" frameborder="0" allowfullscreen></iframe>

但我会有很多:

<p><img class="mceItem" src="http://img.youtube.com/vi/PZVfZ9TmW6w/0.jpg" alt="PZVfZ9TmW6w" width="306" height="229" /></p>

然后我需要做一个preg_replace来替换它们。

可以使用preg_replace吗?

感谢。

3 个答案:

答案 0 :(得分:0)

默认情况下,preg_replace将替换它遇到的所有匹配项。您可以通过添加参数来限制数量。

preg_replace( '/regex/', 'replaceWith', $string, $noOfMatches );

希望能回答你的问题,祝你好运。

如果您正在寻找正则表达式本身,那么快速匹配该字符串将是..

'#<p><img class\="mceItem" src\="http:\/\/img\.youtube\.com\/vi\/PZVfZ9TmW6w\/0\.jpg" alt\="PZVfZ9TmW6w" width\="306" height\="229" \/><\/p>#'

我刚逃过特殊字符。 Here is a cheatsheet on regex.如果你正在解析很多HTML,你可能想要在PHP中检查一些名为DOMDocument的东西。它允许您操作dom结构,并在您学习如何使用它时简化过程。

如果您刚刚开始我推荐使用SimpleHTMLDom解析器,它可以在一个文件中拖动到您的服务器上。它更简单,也是一个很好的介绍。还有很多例子。它保持here

编辑:好的,首先使用正则表达式获取视频ID ..

preg_match_all( '#img\.youtube\.com\/vi\/(.*?)\/#', $searchString, $matches );
foreach( $matches[1] as $vid_id )
{
  $iframe_string = '<iframe width="560" height="345" src="http://www.youtube.com/embed/'.$vid_id.'" frameborder="0" allowfullscreen></iframe>';
  preg_replace( '#<p><img class\="mceItem" src\="http:\/\/img\.youtube\.com\/vi\/\'.$vid_id.\'\/0\.jpg" alt\="'.$vid_id.'" width\="306" height\="229" \/><\/p>#', $iframe_string, $searchString );
}

答案 1 :(得分:0)

是表达式

<p><img class="mceItem" src="http://img.youtube.com/vi/PZVfZ9TmW6w/0.jpg" alt="PZVfZ9TmW6w" width="306" height="229" /></p>

总是经常?您可以使用substr来获取除视频编号PZVfZ9TmW6w之外的所有内容

答案 2 :(得分:0)

使用preg_replace或任何RegEx for HTML进行此类转换只是一个坏主意。

如果你没有像结果那样依赖函数,你可以使用phpqueryquerypath来获取HTML页面中的所有实例并递归以替换所需的任何内容。

可能是关于在PHP中解析HTML的StackOverflow IMHO上最好的文章是这样的: How to parse HTML with PHP?

它还讨论了为什么以及为什么不使用正则表达式解析HTML。主要是为什么不呢。对于我自己和许多其他开发人员而言,尝试使用正则表达式解析HTML(可能在链接到链接或甚至从行到行之间存在细微差别)只是一种痛苦的处方。 HTML过于松散且容许标记,以使RegEx在100%的时间内都能正常工作。