यूट्यूब वीडियो आईडी प्राप्त करने के लिए PHP रेगेक्स?


137

क्या कोई मुझे बता सकता है कि URL में अन्य GET चर क्या हैं, इसकी परवाह किए बिना एक url से youtube आईडी कैसे प्राप्त करें।

उदाहरण के लिए इस वीडियो का उपयोग करें: http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related
तो बीच में v=और अगले से पहले&


1
वह उपयोगी हो सकता है stackoverflow.com/questions/9522868/…

1
आपको मेरा कोड github.com/lingtalfi/video-ids-and-thumbnails/blob/master/… पर देखना चाहिए , मैं ऐसे फ़ंक्शंस प्रदान करता हूं जो youtube, vimeo और dailymotion से आईडी निकालते हैं।
लिंग

@ling in function getVideoThumbnailByUrl () आप Vimeo के लिए पदावनत फ़ाइल_get_contents () का उपयोग कर रहे थे। यह प्रतिस्थापन हर जगह काम करेगा:$ch=curl_init(); curl_setopt($ch, CURLOPT_URL, "http://vimeo.com/api/v2/video/$id.php"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); $hash =unserialize(curl_exec($ch)); curl_close($ch);
jerigarciuh

@ling इसके अलावा getYoutubeId ($ url) अंतिम सशर्त किसी भी स्ट्रिंग को स्वीकार करेगा और इसे YT आईडी के रूप में मान्य करेगा। मैंने इसे 'जंक' पास कर दिया और यह कड़े से आईडी के रूप में वापस लौट आया।
jerrygarciuh

@jerrygarciuh: afaik file_get_contents को पदावनत नहीं किया गया है, यदि आपको इस फ़ंक्शन के साथ समस्या थी, तो github पर किसी समस्या की रिपोर्ट करने के लिए स्वतंत्र महसूस करें। GetYoutubeId में त्रुटि को स्पॉट करने के लिए धन्यवाद (मैंने इसे बढ़ाया)।
लिंग

जवाबों:


304

Parse_url () और parse_str () का उपयोग करें

(आप किसी भी चीज़ के बारे में regexes का उपयोग कर सकते हैं, लेकिन वे इसमें त्रुटि करना बहुत आसान हैं, इसलिए यदि विशेष रूप से PHP फ़ंक्शन हैं जो आप पूरा करने की कोशिश कर रहे हैं, तो उन का उपयोग करें।)

parse_url एक स्ट्रिंग लेता है और इसे एक सरणी में काटता है जिसमें जानकारी का एक गुच्छा होता है। आप इस सरणी के साथ काम कर सकते हैं, या आप एक आइटम को दूसरे तर्क के रूप में निर्दिष्ट कर सकते हैं। इस मामले में हम क्वेरी में रुचि रखते हैं, जो हैPHP_URL_QUERY

अब हमारे पास क्वेरी है, जो है v=C4kxS1ksqtw&feature=relate, लेकिन हम केवल उसके बाद का हिस्सा चाहते हैं v=। इसके लिए हम parse_strमूल रूप से GETस्ट्रिंग की तरह काम करते हैं । यह एक स्ट्रिंग लेता है और स्ट्रिंग में निर्दिष्ट चर बनाता है। इस मामले में $vऔर $featureबनाया गया है। हम केवल में रुचि रखते हैं $v

सुरक्षित होने के लिए, आप सभी चर को केवल स्टोर नहीं करना चाहते parse_url अपने नामस्थान हैं (मोलसून की टिप्पणी देखें)। इसके बजाय चर को एक सरणी के तत्वों के रूप में संग्रहीत करें, ताकि आपके पास जो चर संग्रहीत हो रहे हैं, उन पर आपका नियंत्रण हो और आप गलती से किसी मौजूदा चर को अधिलेखित न कर सकें।

सब कुछ एक साथ रखना, हमारे पास है:

<?php
$url = "http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=relate";
parse_str( parse_url( $url, PHP_URL_QUERY ), $my_array_of_vars );
echo $my_array_of_vars['v'];    
  // Output: C4kxS1ksqtw
?> 

काम करने का उदाहरण


संपादित करें:

हेहे - धन्यवाद चार्ल्स। इससे मुझे हंसी आई, मैंने पहले कभी ज़्वॉन्स्की बोली नहीं देखी:

Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems. - जेमी ज़विंस्की


1
हालांकि यह रेगेक्स का उपयोग नहीं करता है (कम से कम नेत्रहीन - मुझे यकीन नहीं है कि parse_url()हुड के तहत कैसे काम करता है), यह जाने का रास्ता है।
थॉमस ओवंस

11
<Zawinski उद्धरण यहाँ सम्मिलित करें>। हालांकि सभी गंभीरता में, किसी कार्य को करने के लिए भाषा के कार्यों का उपयोग करना अक्सर हूप जंपिंग से बेहतर होने वाला है जो एक अच्छे रेक्स की आवश्यकता हो सकती है।
चार्ल्स

1
मैं केवल parse_str () के दूसरे पैरामीटर का उपयोग करके क्वेरीज़ को किसी सरणी में संग्रहीत करने के लिए सुझाव दूंगा। चर के बाद जादुई रूप से पतली हवा से बाहर आना एक अच्छा विचार नहीं है।
मध्याह्न काल

2
Parse_str () के "जादुई चरों" का उपयोग करने का एक त्वरित सरल उदाहरण एक अच्छा विचार नहीं है -> pastebin.com/AtaaPH4r
mellowsoon

1
@Qualcuno - बिल्कुल नहीं। यह विशेष रूप से ओपी के अनुसार "गेट वेरिएबल्स" प्राप्त करने के लिए है। आपके उदाहरणों को चर नहीं मिलते हैं।
पीटर अज़ताई

154
preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $url, $matches);

इसका हिसाब होगा

youtube.com/v/{vidid}
youtube.com/vi/{vidid}
youtube.com/?v={vidid}
youtube.com/?vi={vidid}
youtube.com/watch?v={vidid}
youtube.com/watch?vi={vidid}
youtu.be/{vidid}

मैंने समर्थन करने के लिए इसे थोड़ा सुधार दिया: http://www.youtube.com/v/5xADESocujo?feature=autoshare&version=3&autohide=1&autoplay=1

अब मैं जिस लाइन का उपयोग करता हूं वह है:

preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+(?=\?)|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $link, $matches);

3
मैंने इसे इस तरह से यूआरएल को संभालने के लिए अपडेट किया है: youtube.com/embed/7zuAOomfiCc #(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+(?=\?)|(?<=embed/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#
simonbs

11
यह सभी urls के लिए काम करता है, inc strings (?<=(?:v|i)=)[a-zA-Z0-9-]+(?=&)|(?<=(?:v|i)\/)[^&\n]+|(?<=embed\/)[^"&\n]+|(?<=(?:v|i)=)[^&\n]+|(?<=youtu.be\/)[^&\n]+ rubular.com/r/M9PJYcQxRW
Rob

3
इस बारे में कैसे / / >] +) /
बोकोर

2
वास्तव में @ bokor का कोड $matchesसरणी को अधिक जानकारी के साथ पॉप्युलेट करता है , जिसमें वीडियो आईडी भी शामिल है जो कि मेरे प्रोजेक्ट के लिए बहुत उपयोगी है
croboklee

2
रोब के rexx के अलावा, और सूची पर भी कब्जा कर लिया गया था। यह नीचे रेगेक्स में छीन लिया गया है: # (? <= (?: V | i) =) [a-zA-Z0-9 -_] + | | (! <= (?: v | i) \ /) | [^ & \ n?] | [^ "और \ n?] (<= एम्बेड \ /?) | (<= (? v | i) =) [? ^ & \ n] |? <? youtu.be \ /) [^ &? \ n] + # अब समर्थित: youtu.be/RRyG_mtYieI?list=PLnBXpb1YLPttK7RZX64qI_AEyFjTvgtx youtube.com/… _AEFFTTT RRyG_mtYieI? सूची = PLnBXpb1YLPttKF7RZX64qI_AEyFjTvgtx youtube.com/v/RRyG_mtYieI
रिक डे

100

एंथनी के जवाब पर बोकार की टिप्पणी पर आधारित:

preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $url, $matches);

$matches[1] vidid सम्‍मिलित है

मेल खाता है:

मिलता जुलता नहीं है:

  • www.facebook.com?wtv=youtube.com/v/vidid

क्या आपके पास इस स्ट्रिंग का C / objc / c ++ संस्करण है? मैं नहीं जानता कि कौन से भाग बचेंगे।
जोओ न्यून्स

मैंने कोशिश की: "^: (?: Http: (? S)?: //)? (?: Www \\।)। (?: Youtu \\। Be /? Youtube \\। Com / (? :() : घड़ी) \ (: * और) वी (: i) = | (??।??? एम्बेड | v | vi | उपयोगकर्ता) /)) ([? ^ \ & \ " '>]) "अपने सभी उदाहरणों को पारित नहीं करना
जोओ नून्स

1
मुझे मेरी समस्या का पता चला। यहाँ यह अंतिम c string है: "^ (?: http: (? s)?: //)? (?:? www\\।)? -?:? youtu \\। be / / | youtube \\। com | \\ (: * और?।) वी: = (? :( ?: घड़ी?)?? (मैं?) |? (? एम्बेड | v | vi | उपयोगकर्ता) /)) ([^ \ & \? "'>] +)"
जोहो नून्स

Youtube.com/watch?v=vidid#action=share जैसे url को भी ध्यान में रखने के लिए मैंने #अंतिम कैप्चरिंग ग्रुप में जोड़ा है :preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?#&\"'>]+)/", $url, $matches);
joshangell

1
यह अंतरिक्ष के साथ सामग्री जोड़ता है और एक पृष्ठ पर एक यूआरएल के बाद सभी पाठ को पकड़ो। यह बेहतर है / (?: http (?: S) ?: \ / \ /)? (?: www \ _)।? ((?: m \)।? (?: youtu \ .be \ /? Youtube \ कॉम \ / \: v: = (? :( ?: घड़ी?)? (* और?।)? (मैं?) |? (? एम्बेड | v | vi | उपयोगकर्ता) \ /)) ([एक करने के लिए zA-Z0-9 \ -_] *) /
Gino

36

यह बहुत आसानी से parse_str और parse_url का उपयोग करके पूरा किया जा सकता है और मेरी राय में अधिक विश्वसनीय है।

मेरा कार्य निम्न यूआरएल का समर्थन करता है:

फ़ंक्शन के नीचे परीक्षण भी शामिल है।

/**
 * Get Youtube video ID from URL
 *
 * @param string $url
 * @return mixed Youtube video ID or FALSE if not found
 */
function getYoutubeIdFromUrl($url) {
    $parts = parse_url($url);
    if(isset($parts['query'])){
        parse_str($parts['query'], $qs);
        if(isset($qs['v'])){
            return $qs['v'];
        }else if(isset($qs['vi'])){
            return $qs['vi'];
        }
    }
    if(isset($parts['path'])){
        $path = explode('/', trim($parts['path'], '/'));
        return $path[count($path)-1];
    }
    return false;
}
// Test
$urls = array(
    'http://youtube.com/v/dQw4w9WgXcQ?feature=youtube_gdata_player',
    'http://youtube.com/vi/dQw4w9WgXcQ?feature=youtube_gdata_player',
    'http://youtube.com/?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtube.com/?vi=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtube.com/watch?vi=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtu.be/dQw4w9WgXcQ?feature=youtube_gdata_player'
);
foreach($urls as $url){
    echo $url . ' : ' . getYoutubeIdFromUrl($url) . "\n";
}

यह वास्तव में बहुत अच्छा है और वास्तव में vimeo वीडियो के लिए भी काम करता है
क्रिस जेम्स Champeau

1
यह मेरा पसंदीदा उत्तर भी है। यह YouTube और Vimeo दोनों को कवर करता है। एक नोट, मैंने एक अतिरिक्त मामूली शुरुआत () के साथ एक सुपर माइनर ट्विक जोड़ा (अगर - isset ($ qs ['vi']))। इसके लिए बहुत धन्यवाद।
1936 को स्पेडली

23

किसी भी प्रकार के लिंक के लिए समाधान !! :

<?php
function get_youtube_id_from_url($url)  {
     preg_match('/(http(s|):|)\/\/(www\.|)yout(.*?)\/(embed\/|watch.*?v=|)([a-z_A-Z0-9\-]{11})/i', $url, $results);    return $results[6];
}


echo get_youtube_id_from_url('http://www.youtube.com/watch?var1=blabla#v=GvJehZx3eQ1$var2=bla');
      // or                   http://youtu.be/GvJehZx3eQ1 
      // or                   http://www.youtube.com/embed/GvJehZx3eQ1
      // or                   http://www.youtu.be/GvJehZx3eQ1/blabla?xyz
?>

आउटपुट: GvJehZx3eQ1


13

यूट्यूब वीडियो आईडी को कैसे मान्य करें पर आधारित है ?

<?php

$links = [
    "youtube.com/v/tFad5gHoBjY",
    "youtube.com/vi/tFad5gHoBjY",
    "youtube.com/?v=tFad5gHoBjY",
    "youtube.com/?vi=tFad5gHoBjY",
    "youtube.com/watch?v=tFad5gHoBjY",
    "youtube.com/watch?vi=tFad5gHoBjY",
    "youtu.be/tFad5gHoBjY",
    "http://youtu.be/qokEYBNWA_0?t=30m26s",
    "youtube.com/v/vidid",
    "youtube.com/vi/vidid",
    "youtube.com/?v=vidid",
    "youtube.com/?vi=vidid",
    "youtube.com/watch?v=vidid",
    "youtube.com/watch?vi=vidid",
    "youtu.be/vidid",
    "youtube.com/embed/vidid",
    "http://youtube.com/v/vidid",
    "http://www.youtube.com/v/vidid",
    "https://www.youtube.com/v/vidid",
    "youtube.com/watch?v=vidid&wtv=wtv",
    "http://www.youtube.com/watch?dev=inprogress&v=vidid&feature=related",
    "youtube.com/watch?v=7HCZvhRAk-M"
];

foreach($links as $link){
    preg_match("#([\/|\?|&]vi?[\/|=]|youtu\.be\/|embed\/)([a-zA-Z0-9_-]+)#", $link, $matches);
    var_dump(end($matches));
}

9

हम जानते हैं कि वीडियो आईडी 11 वर्ण लंबाई है और से पहले किया जा सकता है v=या vi=या v/या vi/या youtu.be/। तो ऐसा करने का सबसे सरल तरीका:

<?php
$youtube = 'http://youtube.com/v/dQw4w9WgXcQ?feature=youtube_gdata_player
http://youtube.com/vi/dQw4w9WgXcQ?feature=youtube_gdata_player
http://youtube.com/?v=dQw4w9WgXcQ&feature=youtube_gdata_player
http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player
http://youtube.com/?vi=dQw4w9WgXcQ&feature=youtube_gdata_player
http://youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player
http://youtube.com/watch?vi=dQw4w9WgXcQ&feature=youtube_gdata_player
http://youtu.be/dQw4w9WgXcQ?feature=youtube_gdata_player';

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

var_dump($matches[0]);

और आउटपुट:

array(8) {
  [0]=>
  string(11) "dQw4w9WgXcQ"
  [1]=>
  string(11) "dQw4w9WgXcQ"
  [2]=>
  string(11) "dQw4w9WgXcQ"
  [3]=>
  string(11) "dQw4w9WgXcQ"
  [4]=>
  string(11) "dQw4w9WgXcQ"
  [5]=>
  string(11) "dQw4w9WgXcQ"
  [6]=>
  string(11) "dQw4w9WgXcQ"
  [7]=>
  string(11) "dQw4w9WgXcQ"
}

9

निम्नलिखित सभी youtube लिंक के लिए काम करेगा

<?php
    // Here is a sample of the URLs this regex matches: (there can be more content after the given URL that will be ignored)
    // http://youtu.be/dQw4w9WgXcQ
    // http://www.youtube.com/embed/dQw4w9WgXcQ
    // http://www.youtube.com/watch?v=dQw4w9WgXcQ
    // http://www.youtube.com/?v=dQw4w9WgXcQ
    // http://www.youtube.com/v/dQw4w9WgXcQ
    // http://www.youtube.com/e/dQw4w9WgXcQ
    // http://www.youtube.com/user/username#p/u/11/dQw4w9WgXcQ
    // http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/dQw4w9WgXcQ
    // http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ
    // http://www.youtube.com/?feature=player_embedded&v=dQw4w9WgXcQ
    // It also works on the youtube-nocookie.com URL with the same above options.
    // It will also pull the ID from the URL in an embed code (both iframe and object tags)

$url = "https://www.youtube.com/watch?v=v2_MLFVdlQM";

    preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $url, $match);

    $youtube_id = $match[1];

echo $youtube_id;
    ?>

4
if (preg_match('![?&]{1}v=([^&]+)!', $url . '&', $m))
    $video_id = $m[1];

धन्यवाद, यह मेरे लिए अच्छा था क्योंकि मैं सभी डोमेन, http और https, और url में किसी अन्य प्रकार का बकवास चाहता था।
मकुराईयामी

4
(?<=\?v=)([a-zA-Z0-9_-]){11}

इसे भी ऐसा ही करना चाहिए।


4

मेरे पास कुछ पोस्ट सामग्री थी, जिसे Youtube ID से बाहर निकालने के लिए मुझे पूरी तरह से सिफर करना पड़ा। यह उस <iframe>एम्बेड कोड के रूप में हुआ जो Youtube प्रदान करता है।

 <iframe src="http://www.youtube.com/embed/Zpk8pMz_Kgw?rel=0" frameborder="0" width="620" height="360"></iframe>

निम्नलिखित पैटर्न मुझे ऊपर @rob से मिला। foreachमैच मिलते ही स्निपेट एक लूप करता है , और एक अतिरिक्त बोनस के लिए मैंने इसे यूट्यूब पर पाए जाने वाले प्रीव्यू इमेज से जोड़ा। यह संभावित रूप से अधिक प्रकार के Youtube एम्बेड प्रकार और url से मेल खा सकता है:

$pattern = '#(?<=(?:v|i)=)[a-zA-Z0-9-]+(?=&)|(?<=(?:v|i)\/)[^&\n]+|(?<=embed\/)[^"&\n]+|(?<=‌​(?:v|i)=)[^&\n]+|(?<=youtu.be\/)[^&\n]+#';

preg_match_all($pattern, $post_content, $matches);

foreach ($matches as $match) {
    $img = "<img src='http://img.youtube.com/vi/".str_replace('?rel=0','', $match[0])."/0.jpg' />";
    break;
}

रोब की प्रोफाइल: https://stackoverflow.com/users/149615/rob


4

idकैप्चरिंग ग्रुप में एक्स्ट्रेक्ट करने के लिए , निम्नलिखित एक्सप्रेशन या उसके कुछ व्युत्पन्न विकल्प भी हो सकते हैं:

(?im)\b(?:https?:\/\/)?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)\/(?:(?:\??v=?i?=?\/?)|watch\?vi?=|watch\?.*?&v=|embed\/|)([A-Z0-9_-]{11})\S*(?=\s|$)

डेमो

परीक्षा

$re = '/(?im)\b(?:https?:\/\/)?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)\/(?:(?:\??v=?i?=?\/?)|watch\?vi?=|watch\?.*?&v=|embed\/|)([A-Z0-9_-]{11})\S*(?=\s|$)/';
$str = 'http://youtube.com/v/tFad5gHoBjY
https://youtube.com/vi/tFad5gHoBjY
http://www.youtube.com/?v=tFad5gHoBjY
http://www.youtube.com/?vi=tFad5gHoBjY
https://www.youtube.com/watch?v=tFad5gHoBjY
youtube.com/watch?vi=tFad5gHoBjY
youtu.be/tFad5gHoBjY
http://youtu.be/qokEYBNWA_0?t=30m26s
youtube.com/v/7HCZvhRAk-M
youtube.com/vi/7HCZvhRAk-M
youtube.com/?v=7HCZvhRAk-M
youtube.com/?vi=7HCZvhRAk-M
youtube.com/watch?v=7HCZvhRAk-M
youtube.com/watch?vi=7HCZvhRAk-M
youtu.be/7HCZvhRAk-M
youtube.com/embed/7HCZvhRAk-M
http://youtube.com/v/7HCZvhRAk-M
http://www.youtube.com/v/7HCZvhRAk-M
https://www.youtube.com/v/7HCZvhRAk-M
youtube.com/watch?v=7HCZvhRAk-M&wtv=wtv
http://www.youtube.com/watch?dev=inprogress&v=7HCZvhRAk-M&feature=related
youtube.com/watch?v=7HCZvhRAk-M
http://youtube.com/v/dQw4w9WgXcQ?feature=youtube_gdata_player
http://youtube.com/vi/dQw4w9WgXcQ?feature=youtube_gdata_player
http://youtube.com/?v=dQw4w9WgXcQ&feature=youtube_gdata_player
http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player
http://youtube.com/?vi=dQw4w9WgXcQ&feature=youtube_gdata_player
http://youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player
http://youtube.com/watch?vi=dQw4w9WgXcQ&feature=youtube_gdata_player
http://youtu.be/dQw4w9WgXcQ?feature=youtube_gdata_player';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

var_dump($matches);

उत्पादन

array(30) {
  [0]=>
  array(2) {
    [0]=>
    string(32) "http://youtube.com/v/tFad5gHoBjY"
    [1]=>
    string(11) "tFad5gHoBjY"
  }
  [1]=>
  array(2) {
    [0]=>
    string(34) "https://youtube.com/vi/tFad5gHoBjY"
    [1]=>
    string(11) "tFad5gHoBjY"
  }
  [2]=>
  array(2) {
    [0]=>
    string(37) "http://www.youtube.com/?v=tFad5gHoBjY"
    [1]=>
    string(11) "tFad5gHoBjY"
  }
  [3]=>
  array(2) {
    [0]=>
    string(38) "http://www.youtube.com/?vi=tFad5gHoBjY"
    [1]=>
    string(11) "tFad5gHoBjY"
  }
  [4]=>
  array(2) {
    [0]=>
    string(43) "https://www.youtube.com/watch?v=tFad5gHoBjY"
    [1]=>
    string(11) "tFad5gHoBjY"
  }
  [5]=>
  array(2) {
    [0]=>
    string(32) "youtube.com/watch?vi=tFad5gHoBjY"
    [1]=>
    string(11) "tFad5gHoBjY"
  }
  [6]=>
  array(2) {
    [0]=>
    string(20) "youtu.be/tFad5gHoBjY"
    [1]=>
    string(11) "tFad5gHoBjY"
  }
  [7]=>
  array(2) {
    [0]=>
    string(27) "http://youtu.be/qokEYBNWA_0"
    [1]=>
    string(11) "qokEYBNWA_0"
  }
  [8]=>
  array(2) {
    [0]=>
    string(25) "youtube.com/v/7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [9]=>
  array(2) {
    [0]=>
    string(26) "youtube.com/vi/7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [10]=>
  array(2) {
    [0]=>
    string(26) "youtube.com/?v=7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [11]=>
  array(2) {
    [0]=>
    string(27) "youtube.com/?vi=7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [12]=>
  array(2) {
    [0]=>
    string(31) "youtube.com/watch?v=7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [13]=>
  array(2) {
    [0]=>
    string(32) "youtube.com/watch?vi=7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [14]=>
  array(2) {
    [0]=>
    string(20) "youtu.be/7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [15]=>
  array(2) {
    [0]=>
    string(29) "youtube.com/embed/7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [16]=>
  array(2) {
    [0]=>
    string(32) "http://youtube.com/v/7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [17]=>
  array(2) {
    [0]=>
    string(36) "http://www.youtube.com/v/7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [18]=>
  array(2) {
    [0]=>
    string(37) "https://www.youtube.com/v/7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [19]=>
  array(2) {
    [0]=>
    string(31) "youtube.com/watch?v=7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [20]=>
  array(2) {
    [0]=>
    string(57) "http://www.youtube.com/watch?dev=inprogress&v=7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [21]=>
  array(2) {
    [0]=>
    string(31) "youtube.com/watch?v=7HCZvhRAk-M"
    [1]=>
    string(11) "7HCZvhRAk-M"
  }
  [22]=>
  array(2) {
    [0]=>
    string(32) "http://youtube.com/v/dQw4w9WgXcQ"
    [1]=>
    string(11) "dQw4w9WgXcQ"
  }
  [23]=>
  array(2) {
    [0]=>
    string(33) "http://youtube.com/vi/dQw4w9WgXcQ"
    [1]=>
    string(11) "dQw4w9WgXcQ"
  }
  [24]=>
  array(2) {
    [0]=>
    string(33) "http://youtube.com/?v=dQw4w9WgXcQ"
    [1]=>
    string(11) "dQw4w9WgXcQ"
  }
  [25]=>
  array(2) {
    [0]=>
    string(42) "http://www.youtube.com/watch?v=dQw4w9WgXcQ"
    [1]=>
    string(11) "dQw4w9WgXcQ"
  }
  [26]=>
  array(2) {
    [0]=>
    string(34) "http://youtube.com/?vi=dQw4w9WgXcQ"
    [1]=>
    string(11) "dQw4w9WgXcQ"
  }
  [27]=>
  array(2) {
    [0]=>
    string(38) "http://youtube.com/watch?v=dQw4w9WgXcQ"
    [1]=>
    string(11) "dQw4w9WgXcQ"
  }
  [28]=>
  array(2) {
    [0]=>
    string(39) "http://youtube.com/watch?vi=dQw4w9WgXcQ"
    [1]=>
    string(11) "dQw4w9WgXcQ"
  }
  [29]=>
  array(2) {
    [0]=>
    string(27) "http://youtu.be/dQw4w9WgXcQ"
    [1]=>
    string(11) "dQw4w9WgXcQ"
  }
}

यदि आप अभिव्यक्ति को सरल / संशोधित / संशोधित करना चाहते हैं, तो इसे regex101.com के ऊपरी दाएँ पैनल पर समझाया गया है । यदि आप चाहें, तो आप भी देख सकते हैं इस लिंक कि यह कुछ नमूना आदानों के साथ कैसे मेल खाता है।


RegEx सर्किट

jex.im नियमित अभिव्यक्ति की कल्पना करता है:

यहां छवि विवरण दर्ज करें



2
$vid = preg_replace('/^.*(\?|\&)v\=/', '', $url);  // Strip all meuk before and including '?v=' or '&v='.

$vid = preg_replace('/[^\w\-\_].*$/', '', $vid);  // Strip trailing meuk.

2

मुझे पता है कि थ्रेड का शीर्षक रेगेक्स के उपयोग को संदर्भित करता है, लेकिन जैसा कि ज़विंस्की बोली कहती है, मुझे वास्तव में लगता है कि रेग्क्स से बचना सबसे अच्छा है। मैं इस फ़ंक्शन को इसके बजाय सुझाऊंगा:

function get_youtube_id($url)
{
    if (strpos( $url,"v=") !== false)
    {
        return substr($url, strpos($url, "v=") + 2, 11);
    }
    elseif(strpos( $url,"embed/") !== false)
    {
        return substr($url, strpos($url, "embed/") + 6, 11);
    }

}

मैं इसकी सलाह देता हूं क्योंकि YouTube वीडियो की आईडी हमेशा समान होती है, जो URL की शैली से स्वतंत्र होती है, उदा

  • http://www.youtube.com/watch?v=t_uW44Bsezg
  • http://www.youtube.com/watch?feature=endscreen&v=Id3xG4xnOfA&NR=1
  • `और अन्य उलार फॉर्म जिसमें शब्द" एम्बेड / "आईडी से पहले रखा गया है ... !!

और यह एम्बेडेड और iframeजेड सामान के लिए मामला हो सकता है ।


0

बस इसे ऑनलाइन http://snipplr.com/view/62238/get-youtube-video-id-very-robro/ पर पाया गया।

function getYouTubeId($url) {
// Format all domains to http://domain for easier URL parsing
str_replace('https://', 'http://', $url);
if (!stristr($url, 'http://') && (strlen($url) != 11)) {
    $url = 'http://' . $url;
}
$url = str_replace('http://www.', 'http://', $url);

if (strlen($url) == 11) {
    $code = $url;
} else if (preg_match('/http:\/\/youtu.be/', $url)) {
    $url = parse_url($url, PHP_URL_PATH);
    $code = substr($url, 1, 11);
} else if (preg_match('/watch/', $url)) {
    $arr = parse_url($url);
    parse_str($url);
    $code = isset($v) ? substr($v, 0, 11) : false;
} else if (preg_match('/http:\/\/youtube.com\/v/', $url)) {
    $url = parse_url($url, PHP_URL_PATH);
    $code = substr($url, 3, 11);
} else if (preg_match('/http:\/\/youtube.com\/embed/', $url, $matches)) {
    $url = parse_url($url, PHP_URL_PATH);
    $code = substr($url, 7, 11);
} else if (preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#", $url, $matches) ) {
    $code = substr($matches[0], 0, 11);
} else {
    $code = false;
}

if ($code && (strlen($code) < 11)) {
    $code = false;
}

return $code;
}

0

मैंने शॉन के जवाब से डेटा का उपयोग किया लेकिन सामान्यीकृत और रेगेक्स को थोड़ा छोटा कर दिया। इस एक के साथ महत्वपूर्ण अंतर यह है कि यह एक वैध Youtube URL के लिए परीक्षण नहीं करेगा, यह सिर्फ एक वीडियो आईडी की तलाश करेगा। मतलब यह अभी भी के लिए एक वीडियो आईडी लौटाएगा www.facebook.com?wtv=youtube.com/v/vidid। सभी परीक्षण मामलों के लिए काम करता है, लेकिन थोड़ा और ढीला है। नतीजतन, यह कुछ के लिए एक झूठी सकारात्मक आउटपुट करेगा https://www.twitter.com/watch?v=vidid। इस विधि का उपयोग करता है, तो डेटा सुपर असंगत है, अन्यथा एक अधिक विशिष्ट regex या का उपयोग parse_url()और parse_str()

preg_match("/([\?&\/]vi?|embed|\.be)[\/=]([\w-]+)/",$url,$matches);
print($matches[2]);

0

मुझे लगता है कि आप ऐसा करने की कोशिश कर रहे हैं।

<?php
  $video = 'https://www.youtube.com/watch?v=u00FY9vADfQ';
  $parsed_video = parse_url($video, PHP_URL_QUERY);
  parse_str($parsed_video, $arr);
?>
<iframe
src="https://www.youtube.com/embed/<?php echo $arr['v'];  ?>"
frameborder="0">
</iframe>

0

और क्या होगा अगर मैं अन्य वर्णों से भरा एक स्ट्रिंग से एक यूटीयू यूआरएल निकालना चाहता हूं? इस तरह:

लोरम इप्सम डोलर अमेट, कंसेटेटुर एडिपिसिंग एलीट, सेड इइसमोड अस्थायी इनिडिडंट यूट लैबर एट डोलोर मैग्ना एलिका। यूट एनिम एड मिनिमम वेनियम, क्विस नॉस्ट्रुड एक्सरसाइज ullamco https://www.youtube.com/watch?v=cPW9Y94BJI0 लेबरिस एनआईआईआई एलिप्रैक्ट एक्स ईआर कमोडो परिणाम। ड्यूस ऑटे यूरेअर डोलर रीप्लेन्ड्रिट इन वॉलपेक्टेट वेलिट एसेल सिलम डोलोर यूआर फुगिया नुल्ला पैराइटुर। असाधारण सिंट ऑवकासैट कपिडैटैट नॉन एक्सीडेंट, सूपा इन सुपापा क्यू ऑफ़िसिया डिसेरंट मोलिट एनीम आईडी इस्ट लेबरम।

और उस स्ट्रिंग से https://www.youtube.com/watch?v=cPW9Y94BJI0 प्राप्त करें ?


0

इस कोड का उपयोग करें:

$url = "http://www.youtube.com/watch?v=C4kxS1ksqtw&feature=related"; 
$parse = parse_url($url, PHP_URL_QUERY); 
parse_str($parse, $output); 
echo $output['watch'];

परिणाम : C4kxS1ksqtw

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.