我需要做一个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吗?
感谢。
答案 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进行此类转换只是一个坏主意。
如果你没有像结果那样依赖函数,你可以使用phpquery或querypath来获取HTML页面中的所有实例并递归以替换所需的任何内容。
可能是关于在PHP中解析HTML的StackOverflow IMHO上最好的文章是这样的: How to parse HTML with PHP?
它还讨论了为什么以及为什么不使用正则表达式解析HTML。主要是为什么不呢。对于我自己和许多其他开发人员而言,尝试使用正则表达式解析HTML(可能在链接到链接或甚至从行到行之间存在细微差别)只是一种痛苦的处方。 HTML过于松散且容许标记,以使RegEx在100%的时间内都能正常工作。