PHP正则表达式匹配Vimeo文本或HTML链接

时间:2014-03-05 14:54:55

标签: php regex youtube vimeo

我正在寻找一个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;因为我还没有充分考虑压力。任何帮助表示赞赏。 :)

1 个答案:

答案 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;