2014-03-05 78 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可能性,但是我意識到這是一個單獨的問題,所以我會將其標記爲已回答。 :) –