2014-03-05 45 views
0

我正在寻找一个PHP的正则表达式,将扫描的文本块和匹配任何Vimeo的网址 - 无论是作为纯文本或HTML格式的链接,这样我就可以嵌入替换它们视频。PHP正则表达式匹配Vimeo的文本或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); 

这些还显得我办(前第一)工作,但我猜有一个更好的方法。

而且,我说“似乎”,是因为我没有强调测试要么足够呢。任何帮助表示赞赏。 :)

+0

因此就让你有什么。我们很乐意提供帮助,但坦率地说,我们厌倦了那些声称他们几乎在工作并且需要我们为他们做所有事情的人。 –

+0

已编辑。对不起,我只是假设他们都有缺陷,他们几乎没有提供任何帮助。 –

+0

如果他们无关紧要的缺陷或不...如果他们不是你就不会在这里,但它很高兴地看到,你居然试着这样做,而不是试图让SO做你的工作了您。有太多freeloaders在那里... –

回答

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; 
+0

感谢您的提示 - 简单的HTML DOM看起来很有用。我最终再次运行这个模块(对于YouTube来说),仅仅是因为我试图简单地将它集成到一个循环中产生了一些非常不可思议的结果,但它在技术上是工作的。我需要改进我的RegEx来覆盖更多的URL可能性,但是我意识到这是一个单独的问题,所以我会将其标记为已回答。 :) –