我正在寻找一个PHP正则表达式,它将扫描一个文本块并匹配任何Vimeo URL - 无论是纯文本还是HTML链接,因此我可以用嵌入的视频替换它们。
我有一个版本的每个工作,但我没有足够的技能来增加它们,以便它可以做到这两个,而且我发现很多半工作的人都没有#&# 39; t似乎说明了这里列出的皱纹:https://stackoverflow.com/a/12263701/1402052
似乎有效匹配HTML链接的那个:
$text = preg_replace('#(.*?)http://(www\.)?vimeo\.com/([^ ?\n/]+)((\?|/).*?(\n|\s))?.*#x', '<div class="video vimeo"><iframe src="//player.vimeo.com/video/$3" width="650" height="366" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>', $text);
似乎有效匹配纯文本网址的那个:
$text = preg_replace('#http://(www\.)?vimeo\.com/(\d+)#', '<div class="video vimeo"><iframe src="//player.vimeo.com/video/$2" width="650" height="366" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>', $text);
如果我运行两个(前者),这些似乎也有效,但我猜测那里有更好的方法。
另外,我说&#34;似乎&#34;因为我还没有充分考虑压力。任何帮助表示赞赏。 :)
答案 0 :(得分:1)
您可以在此处使用Simple HTML DOM:
define(
'VIMEO_URL_PATTERN' ,
'~https?://(?:www\.)?vimeo\.com/.*?/?(\d+)~i'
);
define(
'URL_REPLACEMENT' ,
'<div ... <iframe src="//player.vimeo.com/video/$1...</div>'
);
$html = ... // Load HTML code here
// Change links
foreach($html->find('a') as $link) {
if (
preg_match(
VIMEO_URL_PATTERN,
$link->href,
$matches
)
) {
$link->outertext = preg_replace(
VIMEO_URL_PATTERN,
URL_REPLACEMENT,
$link->href
);
}
}
// Change text
foreach($html->find('text') as $text) {
$text->outertext = preg_replace(
VIMEO_URL_PATTERN,
URL_REPLACEMENT,
$text
);
}
echo $html;