2016-05-14 2 views
1

YouTube URLを含むテキストがあります。 YouTubeのビデオコードを除いて、リンクのすべての部分を削除する必要があります。 URLは空白で囲まれても、空白で囲まれてもかまいません空白以外の文字はURLに隣接しません。Regex:文字列内のYouTube URLをスクラブし、YouTubeビデオコードのみを残す

SAMPLE:

$txt = "This text contain this link: https://www.youtube.com/watch?v=b8ri14rw32c&rel=0 and so on..." 

抽出ID:EXPECTED

$pattern = '#(?<=v=|v\/|vi=|vi\/|youtu.be\/)[a-zA-Z0-9_-]{11}#'; 
preg_match_all($pattern, $txt, $matches); 
print_r($matches); 

Array 
(
    [0] = "This text contain this link b8ri14rw32c and so on..." 
) 
+0

あなたは疑問を持っていますか? –

+0

正規表現があなたの説明と一致しません。前後のサンプルを前後に表示する_ – sln

+0

@sln '$ pattern = '#(?<= v = | v \/| vi = | vi \/| youtu.be \ /)[a-zA-Z0-9 _-] {11}#'; preg_match_all($パターン、$ txt、$一致); print_r($ matches); ' – degeaba

答えて

1

\1
(キャプチャグループ1)と交換してください:正確に一つのキャプチャが、この表現ではあり

https:\/\/(?:www.)?youtu(?:be\.com|\.be)\/(?:watch\?vi?[=\/])?(\w{11})(?:&\w+=[^&\s]*)* 

、それはYouTubeのビデオコード用です。このキャプチャは正規表現の置き換えで使用でき、リンクテキスト全体をキャプチャしたビデオコードだけに置き換えることができます。

https://www.youtube.com/watch?v=b8ri14rw32c&rel=0 
https://youtu.be/Rk_sAHh9s08 

その他のYouTubeのURL形式はテストされていませんが、必要に応じて簡単にサポートすることができます

この正規表現は、これらの形式のYouTubeのURLで動作します。

このPHPコードはpreg_replaceを使用して、この正規表現の置換をテストします:

$txt = "This text contain this link: https://www.youtube.com/watch?v=b8ri14rw32c&rel=0 and so on..." 
$pattern = "https:\/\/(?:www.)?youtu(?:be\.com|\.be)\/(?:watch\?vi?[=\/])?(\w{11})(?:&\w+=[^&\s]*)*" 
$text = preg_replace($pattern, '\1', $txt); 
2

私が正しくあなたを理解している場合、(unshortened)通常のYouTubeのリンクのために働く必要があり、次。

https?:\/\/[^\s]+[?&]v=([^&\s]+)[^\s]* 

は、あなたが合うように、このパターンを試すことができます

Regex demo.

+0

私はすでに私はyoutubeのIDを持っていることを説明....私はIDを含むリンクを削除する必要があります! – degeaba

+0

@degeaba正規表現置換機能を使用して、私の更新された答えを見てください。 –

関連する問題