ইউটিউব ভিডিও আইডি পেতে পিএইচপি রেজেক্স?


137

ইউআরএল থেকে অন্যান্য জিইটি ভেরিয়েবলগুলি কী তা নির্বিশেষে কেউ কীভাবে ইউআরএল আইডিটি পেতে হবে তা আমাকে দেখাতে পারে get

উদাহরণস্বরূপ এই ভিডিওটি ব্যবহার করুন: 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/… এ দেখুন , আমি এমন ফাংশন সরবরাহ করি যা ইউটিউব, ভিমেও এবং ডেইলিমোশন থেকে আইডি বের করে।
লিংক

@ ফাংশনটি getVideoThumbnailByUrl () এ ক্লিক করে আপনি ভিওমোর জন্য অবহেলিত ফাইল_জেট_কন্টেন্টস () ব্যবহার করছেন। এই প্রতিস্থাপনটি সর্বত্র কাজ করবে:$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);
jerrygarciuh

@ling এছাড়াও getYoutubeId ($ url) এ চূড়ান্ত শর্তযুক্ত যে কোনও স্ট্রিং গ্রহণ করবে এবং এটি ওয়াইটি আইডি হিসাবে বৈধ করবে। আমি এটি 'জাঙ্ক' পাস করেছি এবং এটি স্ট্রিং থেকে আইডিকে পার্স করার হিসাবে জাঙ্কটি ফিরে আসল।
jerrygarciuh

@ জেরিগারসিউহ: আফিক ফাইল_জেট_কন্টেন্টস অবহেলা করা হয়নি, যদি এই ফাংশনটিতে আপনার সমস্যা হয় তবে গিথুব সম্পর্কিত একটি সমস্যা নির্দ্বিধায় জানুন। GetYoutubeId এ ত্রুটি চিহ্নিত করার জন্য ধন্যবাদ (আমি এটি বাড়িয়েছি)।
Ling

উত্তর:


304

Parse_url () এবং parse_str () ব্যবহার করুন

(আপনি যে কোনও কিছুর জন্য রেজিক্সগুলি ব্যবহার করতে পারেন তবে এটিকে ত্রুটি করা খুব সহজ, সুতরাং আপনি যা সম্পাদন করতে চেষ্টা করছেন তার জন্য যদি বিশেষত পিএইচপি ফাংশন থাকে তবে সেগুলি ব্যবহার করুন))

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()হুডের নীচে কাজ করে) তবে এটি যাওয়ার উপায়।
থমাস 3'10

11
<জাভিনস্কির উদ্ধৃতি এখানে sertোকান>। যদিও সমস্ত গুরুত্ব সহকারে, একটি কার্য সম্পাদন করতে ভাষা ফাংশন ব্যবহার করা প্রায়শই হুপ জাম্পিংয়ের চেয়ে ভাল হতে চলেছে যা একটি ভাল রেইজেক্সের প্রয়োজন হতে পারে।
চার্লস

1
আমি কেবলমাত্র পার্স_স্ট্রিটার () এর দ্বিতীয় পরামিতিটি ব্যবহার করে ক্যোয়ারী প্যারামগুলিকে একটি অ্যারেতে সঞ্চয় করতে পরামর্শ দেব। ভেরিয়েবলগুলি পাতলা বাতাসের বাইরে যাদুতে প্রদর্শিত হওয়া কখনই ভাল ধারণা নয়।
মেলুনসুন

2
পার্স_স্ট্রি () এর "ম্যাজিক ভেরিয়েবল" কেন ব্যবহার করা যায় তার একটি সহজ সহজ উদাহরণ -> পেস্টবিন.
com

1
@ কোয়ালকুনো - অবশ্যই না। এটি বিশেষত "ভেরিয়েবলগুলি পান" পুনরুদ্ধারের জন্য - ওপি প্রতি per আপনার উদাহরণগুলি ভেরিয়েবলগুলি পায় না।
পিটার আজতাই

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/e #(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+(?=\?)|(?<=embed/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#
એમ્બેડ/

11
এটি সমস্ত url এর জন্য কাজ করে, (?<=(?:v|i)=)[a-zA-Z0-9-]+(?=&)|(?<=(?:v|i)\/)[^&\n]+|(?<=embed\/)[^"&\n]+|(?<=(?:v|i)=)[^&\n]+|(?<=youtu.be\/)[^&\n]+ ইনব
রব

3
এটি সম্পর্কে /(youtu\.be\/ypeyoutube\.com\/(watch\?(.*&)?v=mitted(e এম্বেডভিফিকুজার)\/))( ده^\? & "' >] +) /
বোকর

2
আসলে @ বকরের কোডটি $matchesভিডিও আইডি সহ আরও তথ্যের সাথে অ্যারে
পপুলেট করে

2
রবের রেগেজ এ যোগ করা হয়েছে, এবং তালিকাকেও ক্যাপচার করা হয়েছে। এটি নীচের রেজিজেটে ছিটানো হয়েছে: # (? <? (?: V | i) =) [a-zA-Z0-9 -_] + | (? <? (?: V | i) \ /) [^ & \ N?] | [^ "& \ N?] (<= এম্বেড \ /?) | (<= (:? বনাম | ঝ) =) [? ^ & \ N] | (? <= youtu.be \ /) [^ &? \ n] + # এখন সমর্থিত: youtu.be/RRyG_mtYieI?list=PLnBXpb1YLPttKF7RZX64qI_AEyFjTvgtx youtube.com/… ‌ _এইইএফজেটিভিটিউটিউইউ // wwtube.com/w আরআরজি_এমটিইআইআই? তালিকা = 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] বিডিড রয়েছে

মিলগুলি:

মেলে না:

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

আপনার কাছে এই স্ট্রিংয়ের কোনও সি / অবজেক্ট / সি ++ সংস্করণ রয়েছে? আমি জানি না কোন অংশগুলি পালাতে হবে।
জোও নুনস

আমি চেষ্টা করেছি: "^ (?: Http (? S)?: //)? (?: Www \\।)? (?: Youtu \\। Be / | youtube \\। Com / (? :(? : ঘড়ি) \ (: * &) V (: আমি) = | (:?।?? এম্বেড | বনাম | VI | ব্যবহারকারী) /)) ([? ^ \ & \ " '>]) "আপনার সমস্ত উদাহরণ পাস না করা
জোও নুনস

1
আমি আমার সমস্যা খুঁজে পেয়েছি। এখানে এটি চূড়ান্ত সি স্ট্রিং: "^ (?: http (?: s)?: //)? (?: www \\।)? (?: youtu \\। be / | ইউটিউব \\। com / \\ (: * &?।) বনাম: = (:( ?: দেখেছেন?)?? (ঝ?) |? (: এম্বেড | বনাম | VI | ব্যবহারকারী) /)) ([^ \ & \? "'>] +)"
জোও নুনস

Youtube.com/watch?v=vidid#action=share এর মতো অ্যাকাউন্টগুলিও অ্যাকাউন্টে নেওয়ার জন্য আমি #সমাপ্তি ক্যাপচার গ্রুপটিতে যুক্ত করেছি:preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?#&\"'>]+)/", $url, $matches);
জোশঙ্গেল

1
এটি স্থানের সাথে সামগ্রী যুক্ত করে এবং একটি পৃষ্ঠায় ইউআরএল পরে সমস্ত পাঠ্য দখল করে। এটি আরও ভাল / (?: http (?: S)?: \ / \ /)? (?: www \।)? (?: M \।)? (?: youtu \ .be \ / | youtube \। কম \ / \: V: = (:( ?: ঘড়ি?)? (* &।)? (ঝ?) |? (: এম্বেড | বনাম | VI | ব্যবহারকারী) \ /)) ([A- zA-Z0-9 \ -_] *) /
গিনো

36

এটি খুব সহজেই পার্স_স্টার এবং পার্স_আরল ব্যবহার করে সম্পন্ন করা যায় এবং আমার মতে এটি আরও নির্ভরযোগ্য।

আমার ফাংশন নিম্নলিখিত 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";
}

এটি সত্যিই দুর্দান্ত এবং বাস্তবে ভিমেও ভিডিওগুলির জন্যও কাজ করে
ক্রিস জেমস চ্যাম্পিয়ো

1
এটিও আমার পছন্দসই উত্তর। এটি YouTube এবং Vimeo উভয়ই কভার করে না। একটি নোট, আমি একটি অতিরিক্ত আইসেট () দিয়ে একটি সুপার মাইনর টুইক যুক্ত করেছি - অন্যথায় যদি (আইসেট ($ কিউএস ['ভিআই'])) থাকে। এই জন্য অনেক ধন্যবাদ।
স্পিডলি

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

নিম্নলিখিত সমস্ত ইউটিউব লিঙ্কের জন্য কাজ করবে

<?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

ইউটিউব আইডি বের করে আনার জন্য আমার কিছু পোস্ট কন্টেন্ট ছিল throughout এটি <iframe>এম্বেড কোড ইউটিউব সরবরাহ করে এমন আকারে ঘটেছে ।

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

নীচের প্যাটার্নটি আমি উপরে @ আরব থেকে পেয়েছি। foreachমিলগুলি পাওয়া গেলে স্নিপেট একটি লুপ করবে এবং যুক্ত বোনাসের জন্য আমি এটি ইউটিউবে পাওয়া পূর্বরূপ চিত্রের সাথে সংযুক্ত করেছি। এটি সম্ভাব্যভাবে ইউটিউব এম্বেড প্রকারের আরও বেশি প্রকারের এবং ইউআরএলগুলির সাথে মেলে:

$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 এর ডানদিকে ডান প্যানেলে ব্যাখ্যা করা হয়েছে । আপনি যদি চান, আপনি এই লিঙ্কটিতেও দেখতে পারেন , কীভাবে এটি কিছু নমুনার ইনপুটগুলির সাথে মেলে।


রেজেক্স সার্কিট

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

}

আমি এটির পরামর্শ দিচ্ছি কারণ ইউটিউব ভিডিওগুলির আইডি সর্বদা একই থাকে, যেমন ইউআরএল এর স্টাইল থেকে পৃথক

  • 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-robust/ এ পাওয়া গেছে

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

আমি শনের উত্তর থেকে ডেটা ব্যবহার করেছি তবে সাধারণীকরণ করেছি এবং রেজেক্সকে কিছুটা ছোট করেছি। এর সাথে মূল পার্থক্যটি হ'ল এটি কোনও বৈধ ইউটিউব URL টি পরীক্ষা করে না, এটি কেবল একটি ভিডিও আইডি সন্ধান করবে। এর অর্থ এটি এখনও একটি ভিডিও আইডি ফিরিয়ে দেবে www.facebook.com?wtv=youtube.com/v/vidid। সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে তবে কিছুটা শিথিল। ফলে, এটা আউটপুট মত কিছু জন্য একটি মিথ্যা ইতিবাচক হবে https://www.twitter.com/watch?v=vidid। যদি ডেটা অতি অসামঞ্জস্যপূর্ণ হয় তবে এই পদ্ধতিটি ব্যবহার করুন, অন্যথায় আরও নির্দিষ্ট নির্দিষ্ট রেগেক্স বা 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

এবং যদি আমি অন্য অক্ষরের পূর্ণ স্ট্রিং থেকে একটি ইউটিউএল ইউআরএল বের করতে চাই তবে কী হবে? এটার মত:

আপনি এখানে কাজ করতে পারবেন না, আপনার জন্য সবচেয়ে ভাল কাজ করতে পারেন, কিন্তু আপনি শ্রম এবং ম্যাগাজিনের মত কাজ করতে পারেন। আপনি আমাদের উপর নির্ভর করতে পারেন, তবে আমাদের ব্যায়ামের 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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.