【问题标题】:PHP regex to match Vimeo text OR html linkPHP 正则表达式匹配 Vimeo 文本或 html 链接
【发布时间】:2014-03-05 14:54:54
【问题描述】:

我正在寻找一个 PHP 正则表达式,它将扫描文本块并匹配任何 Vimeo URL——无论是纯文本还是 HTML 链接,所以我可以用嵌入的视频替换它们。

我有每个工作的版本,但我没有足够的技能来增强它们以便它可以同时做这两个,而且我发现的很多半工作的似乎并没有解释此处列出的皱纹: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);

似乎有效匹配纯文本 URL 的一种:

$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);

如果我运行 both(前者第一个),这些似乎也可以工作,但我猜有更好的方法。

另外,我说“似乎”是因为我还没有充分强调测试。任何帮助表示赞赏。 :)

【问题讨论】:

  • 所以展示你所拥有的。我们很乐意提供帮助,但坦率地说,我们厌倦了人们声称他们几乎可以工作,并且无论如何都需要我们为他们做所有事情。
  • 已编辑。抱歉,我只是假设两者都有足够的缺陷,以至于他们几乎无法提供帮助。
  • 它们是否有缺陷并不重要......如果它们没有你就不会在这里,但很高兴看到你真的尝试过这样做,而不是试图让 SO 为您完成工作。那里有太多的免费加载者......

标签: php regex youtube vimeo


【解决方案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;

【讨论】:

  • 感谢您的提示——简单的 HTML DOM 看起来非常有用。我最终再次运行了这个块(对于 YouTube 也是如此),仅仅是因为我尝试将它简单地集成到一个循环中产生了一些非常不稳定的结果,但它在技术上确实有效。我需要改进我的 RegEx 以涵盖更多 URL 可能性,但我意识到这是一个单独的问题,所以我将其标记为已回答。 :)
猜你喜欢
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 2011-06-27
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多