আমি কীভাবে একটি রেজেেক্স ব্যবহার করে সমস্ত ইউটিউব ভিডিও আইডিকে স্ট্রিংয়ে খুঁজে পাই?


92

আমার কাছে একটি পাঠ্যক্ষেত্র রয়েছে যেখানে ব্যবহারকারীরা যে কোনও কিছু লিখতে পারেন।

উদাহরণ স্বরূপ:

Lorem Ipsum কেবল ডামি পাঠ্য। http://www.youtube.com/watch?v=DUQi_R4Sg মুদ্রণ ও টাইপসেটিং শিল্পের। লোরেম ইপসাম 1500 এর দশক থেকে শিল্পের স্ট্যান্ডার্ড ডামি পাঠ্যরূপে রয়েছেন, যখন কোনও অজানা প্রিন্টার একটি প্রকারের গ্যালি নিয়েছিলেন এবং কোনও ধরণের নমুনার বই তৈরি করতে স্ক্র্যাম্বল করেছিলেন। এটি কেবল পাঁচটি শতাব্দীই বেঁচে নেই, বৈদ্যুতিন টাইপসেটেটিংয়ে ঝাঁপিয়ে পড়েছে, মূলত অপরিবর্তিত রয়েছে। http://www.youtube.com/watch?v=A_6gNZCkajU&feature=relmfu ১৯60০ এর দশকে লরেম ইপসাম প্যাসেজ সহ লেটারসেট শীট প্রকাশের মাধ্যমে এবং সম্প্রতি সম্প্রতি এলডাস পেজমেকারের মতো ডেস্কটপ প্রকাশনা সফটওয়্যার সহ লোরেম ইপসামের সংস্করণ সহ জনপ্রিয় হয়েছিল।

এখন আমি এটি বিশ্লেষণ করতে এবং সমস্ত ইউটিউব ভিডিও ইউআরএল এবং তাদের আইডিগুলি খুঁজতে চাই।

কোন ধারণা কিভাবে কাজ করে?


উত্তর:


291

একটি ইউটিউব ভিডিও ইউআরএল বিভিন্ন ফর্ম্যাটে মুখোমুখি হতে পারে:

  • সর্বশেষ সংক্ষিপ্ত বিন্যাস: http://youtu.be/NLqAF9hrVbY
  • iframe: http://www.youtube.com/embed/NLqAF9hrVbY
  • iframe (সুরক্ষিত): https://www.youtube.com/embed/NLqAF9hrVbY
  • বস্তু পরম: http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
  • বস্তু এম্বেড: http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
  • ঘড়ি: http://www.youtube.com/watch?v=NLqAF9hrVbY
  • ব্যবহারকারী: http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo
  • ytscreeningroom: http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I
  • যে কোনও জিনিস / যায়! http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/2/PPS-8DMrAn4
  • যে কোনও / সাবডোমেন / খুব: http://gdata.youtube.com/feeds/api/videos/NLqAF9hrVbY
  • আরও প্যারাম: http://www.youtube.com/watch?v=spDj54kf-vY&feature=g-vrec
  • ক্যোয়ারিতে বিন্দু থাকতে পারে: http://www.youtube.com/watch?v=spDj54kf-vY&feature=youtu.be
  • নোকি ডোমেন: http://www.youtube-nocookie.com

এখানে মন্তব্যযুক্ত রেইগেক্সের সাথে একটি পিএইচপি ফাংশন রয়েছে যা এই প্রতিটি URL ফর্মের সাথে মেলে এবং তাদের লিঙ্কগুলিতে রূপান্তর করে (যদি তারা ইতিমধ্যে লিঙ্ক না হয়):

// Linkify youtube URLs which are not already links.
function linkifyYouTubeURLs($text) {
    $text = preg_replace('~(?#!js YouTubeId Rev:20160125_1800)
        # Match non-linked youtube URL in the wild. (Rev:20130823)
        https?://          # Required scheme. Either http or https.
        (?:[0-9A-Z-]+\.)?  # Optional subdomain.
        (?:                # Group host alternatives.
          youtu\.be/       # Either youtu.be,
        | youtube          # or youtube.com or
          (?:-nocookie)?   # youtube-nocookie.com
          \.com            # followed by
          \S*?             # Allow anything up to VIDEO_ID,
          [^\w\s-]         # but char before ID is non-ID char.
        )                  # End host alternatives.
        ([\w-]{11})        # $1: VIDEO_ID is exactly 11 chars.
        (?=[^\w-]|$)       # Assert next char is non-ID or EOS.
        (?!                # Assert URL is not pre-linked.
          [?=&+%\w.-]*     # Allow URL (query) remainder.
          (?:              # Group pre-linked alternatives.
            [\'"][^<>]*>   # Either inside a start tag,
          | </a>           # or inside <a> element text contents.
          )                # End recognized pre-linked alts.
        )                  # End negative lookahead assertion.
        [?=&+%\w.-]*       # Consume any URL (query) remainder.
        ~ix', '<a href="http://www.youtube.com/watch?v=$1">YouTube link: $1</a>',
        $text);
    return $text;
}

; // শেষ $ ইউটিউবআইডি।

এবং এখানে ঠিক একই রেজেক্স সহ একটি জাভাস্ক্রিপ্ট সংস্করণ রয়েছে (মন্তব্যগুলি সরানো হয়েছে):

// Linkify youtube URLs which are not already links.
function linkifyYouTubeURLs(text) {
    var re = /https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube(?:-nocookie)?\.com\S*?[^\w\s-])([\w-]{11})(?=[^\w-]|$)(?![?=&+%\w.-]*(?:['"][^<>]*>|<\/a>))[?=&+%\w.-]*/ig;
    return text.replace(re,
        '<a href="http://www.youtube.com/watch?v=$1">YouTube link: $1</a>');
}

মন্তব্য:

  • URL এর VIDEO_ID অংশ এক এবং একমাত্র ক্যাপচার গ্রুপ বন্দী হয়: $1
  • আপনি যদি জানেন যে আপনার পাঠ্যে কোনও প্রাক-লিঙ্কযুক্ত URL থাকে না তবে আপনি নিরাপদে conditionণাত্মক দৃষ্টিনন্দন উত্সাহটি সরিয়ে ফেলতে পারেন যা এই শর্তটির পরীক্ষা করে (মন্তব্যটি দিয়ে শুরু হওয়া দৃ :় বক্তব্য: "URL টি পূর্ব-সংযুক্ত নয়" ) এটি গতিবেগ করবে কিছুটা রেগেক্স আপ।
  • প্রতিস্থাপন স্ট্রিং অনুসারে পরিবর্তন করা যেতে পারে। উপরে দেওয়া কেবল এক জেনেরিক একটি লিঙ্ক তৈরি করে "http://www.youtube.com/watch?v=VIDEO_ID"শৈলী URL এবং লিঙ্কটি টেক্সট সেট করে: "YouTube link: VIDEO_ID"

সম্পাদনা 2011-07-05: যোগ করা হয়েছে -আইডি গৃহস্থালির কাজ ক্লাসে হাইফেন

2011-07-17 সম্পাদনা করুন: ইউটিউব আইডি অনুসরণ করে URL এর অবশিষ্ট অংশ (যেমন ক্যোয়ারী ) গ্রাস করার জন্য স্থির রেজেক্স to যোগ করা হয়েছে 'i' উপেক্ষা-কেস পরিবর্তক। উট কেসে ফাংশনটির নতুন নামকরণ করা হয়েছে। উন্নত প্রাক-লিঙ্কযুক্ত লুক হেড পরীক্ষা।

2011-07-27 সম্পাদনা করুন: ইউটিউব ইউআরএলগুলির নতুন "ব্যবহারকারী" এবং "ytscreeningroom" ফর্ম্যাট যুক্ত করা হয়েছে।

2011-08-02 সম্পাদনা করুন: ইউটিউব ইউআরএল নতুন "যে কোনও / জিনিস / যায়" পরিচালনা করতে সরলীকৃত / সাধারণীকরণ।

2011-08-25 সম্পাদনা করুন: বেশ কয়েকটি পরিবর্তন:

  • linkifyYouTubeURLs()ফাংশনের জাভাস্ক্রিপ্ট সংস্করণ যুক্ত করা হয়েছে ।
  • পূর্ববর্তী সংস্করণে স্কিম (এইচটিটিপি প্রোটোকল) অংশটি alচ্ছিক ছিল এবং সুতরাং এটি অবৈধ ইউআরএলগুলির সাথে মেলে। প্রয়োজনীয় স্কিম অংশ তৈরি।
  • পূর্ববর্তী সংস্করণটি \bVIDEO_ID এর চারদিকে সীমানা অ্যাঙ্গর শব্দটি ব্যবহার করেছিল । তবে, VIDEO_ID -ড্যাশ দিয়ে শুরু বা শেষ হয়ে গেলে এটি কাজ করবে না । স্থির করে নিন যাতে এটি এই শর্তটি পরিচালনা করে।
  • VIDEO_ID এক্সপ্রেশনটি এমনভাবে পরিবর্তন করেছে যাতে এটি অবশ্যই 11 টি অক্ষরের দীর্ঘ হবে।
  • পূর্ববর্তী সংস্করণটি পূর্ব-লিঙ্কযুক্ত URL গুলি বাদ দিতে ব্যর্থ হয়েছে যদি তাদের VIDEO_ID অনুসরণ করে কোয়েরি স্ট্রিং থাকে। এটি ঠিক করার জন্য negativeণাত্মক দৃষ্টিভঙ্গি দৃser়তা উন্নতি করেছে।
  • যোগ করা হয়েছে +এবং %ক্যোয়ারী অক্ষরের সাথে শ্রেণীর মিল রয়েছে।
  • পরিবর্তিত পিএইচপি সংস্করণ Regex বিভেদক থেকে: %একটি হবে: ~
  • কিছু সহজ নোট সহ একটি "নোট" বিভাগ যুক্ত করা হয়েছে।

2011-10-12 সম্পাদনা করুন: ইউটিউব ইউআরএল হোস্ট অংশে এখন কোনও সাবডোমেন থাকতে পারে (কেবল নয় www.)।

2012-05-01 সম্পাদনা করুন: গ্রাহক ইউআরএল বিভাগটি এখন '-' এর জন্য মঞ্জুরি দিতে পারে।

2013-08-23 সম্পাদনা করুন: @ মাই দ্বারা সরবরাহিত অতিরিক্ত ফরম্যাট যুক্ত হয়েছে। (ক্যোয়ারী অংশে একটি .বিন্দু থাকতে পারে ।

সম্পাদনা 2013-11-30: যোগ করা হয়েছে অতিরিক্ত @CRONUS দ্বারা উপলব্ধ বিন্যাস: youtube-nocookie.com

2016-01-25 সম্পাদনা করুন: ক্রোনাস দ্বারা সরবরাহ করা ত্রুটি কেস পরিচালনা করতে স্থির রেজেক্স।


4
আমি কোনও চশমা দেখিনি, যদিও আমি এটি অনুসন্ধান করেছিলাম। আমি কেবলমাত্র ইন্টারনেটের দাবানলে কিছু লিঙ্কগুলিতে ড্যাশটি লক্ষ্য করেছি। উদাহরণস্বরূপ: youtube.com/watch?v=CLPk-6_xgiY
সুতিবালপাও

4
@ লিটল ফ্লুকিকিটি: মাথা উঁচু করার জন্য ধন্যবাদ। হাইফেনকে বৈধ আইডি চর হিসাবে অন্তর্ভুক্ত করার জন্য উত্তর আপডেট করেছেন।
ছদ্মবেশী

4
@ অডিগারুন্নার: আপনি যদি কোনও সম্পাদনার বিষয়ে আত্মবিশ্বাসী না হন তবে আপনি রোল-ব্যাক করতে পারেন। অতিরিক্ত হিসাবে উইকিপিডিয়ায় পুরো ইতিহাস আপনার ক্রেডিট সঙ্গে রাখা হয়। আমি আপনাকে সময়ের সাথে সাথে সত্যই উত্তরটি উদ্যান করতে দেখেছি, সুতরাং আপনাকে এখানে ছাড়িয়ে নেওয়াটা খুব মাতাল।
hakre

4
এখানে কাজ করা হয়নি এমন একটি এখানে রয়েছে: youtube.com/watch?v=E1IPnnttL9k&feature=youtu.be
andrebola

4
এটি দুর্দান্ত কাজ করে তবে এই (নতুন?) ক্যোরিস্ট্রিং পরম: বৈশিষ্ট্য = youtu.be এর সাথে ব্যর্থ। [? = & +% \ W -] * তে [? = & +% \ W - \।] * তে পরিবর্তন করা আপনার "অবশিষ্ট ইউআরএল গ্রহণ করুন" রেখায় কৌশলটি করে। ধন্যবাদ!
মেই গুইলিম

10

এখানে এমন একটি পদ্ধতি যা আমি একবার এমন প্রকল্পের জন্য লিখেছিলাম যা ইউটিউব এবং ভিমেও ভিডিও কীগুলি নিষ্কাশন করে:

/**
 *  strip important information out of any video link
 *
 *  @param  string  link to a video on the hosters page
 *  @return mixed  FALSE on failure, array on success
 */
function getHostInfo ($vid_link)
{
  // YouTube get video id
  if (strpos($vid_link, 'youtu'))
  {
    // Regular links
    if (preg_match('/(?<=v\=)([\w\d-_]+)/', $vid_link, $matches))
      return array('host_name' => 'youtube', 'original_key' => $matches[0]); 
    // Ajax hash tag links
    else if (preg_match('§([\d\w-_]+)$§i', $vid_link, $matches))
      return array('host_name' => 'youtube', 'original_key' => $matches[0]);
    else
      return FALSE;
  }
  // Vimeo get video id
  elseif (strpos($vid_link, 'vimeo'))
  {
    if (preg_match('§(?<=/)([\d]+)§', $vid_link, $matches))
      return array('host_name' => 'vimeo', 'original_key' => $matches[0]); 
    else
      return FALSE;
  }
  else
    return FALSE;
}
  1. এমন একটি রেজেক্স সন্ধান করুন যা কোনও পাঠ্য থেকে সমস্ত লিঙ্ক বের করবে। গুগল সেখানে আপনাকে সাহায্য করবে।
  2. সমস্ত লিঙ্ক লুপ করুন এবং প্রতিটি জন্য getHostInfo () কল করুন

4
মহান ধন্যবাদ! সামান্য মোড সাধারণ ইউআরএলগুলি ছাড়াও if(strpos($vid_link, 'youtu'))সংক্ষিপ্ত url টি ক্যাপচার করবে youtu.be
চামিলিয়ান

আপনাকে স্বাগতম. আপডেটের জন্য ধন্যবাদ, আমি পরিবর্তনটি সম্পাদনা করেছি। পার্শ্ব নোটে, রডগারুনারের রেজিেক্সটি আসল চুক্তি বলে মনে হচ্ছে এবং আমি এটি আমার সাধারণ জিনিসটির উপরে ব্যবহার করার পরামর্শ দিচ্ছি। চিয়ার্স
ক্রিস্টোফ

ঠিক আমি খুঁজছেন ছিল কি. সাথীর দাগ! +1
ব্ল্যাকপ্লাইল 9

8

যদিও রাজারগনারের উত্তরটি আমার উত্তরের ভিত্তি, যদিও তার VIDEO_IDইউটিউব ইউআরএল একাধিক সম্ভাব্য ম্যাচের কারণে এটি সবকটি ইউআরএলের জন্য সমাধান করে না এবং আমি বিশ্বাস করি না যে এটি এটি সক্ষম । আমার রেজেক্সে তার আক্রমণাত্মক পদ্ধতির অন্তিম অবলম্বন হিসাবে অন্তর্ভুক্ত করেছে, তবে প্রথমে সমস্ত সাধারণ মিলগুলি চেষ্টা করে, পরে URL এ ভুল ম্যাচের সম্ভাবনা হ্রাস করে।

এই রেজেক্স:

/https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/ytscreeningroom\?v=|\/feeds\/api\/videos\/|\/user\S*[^\w\-\s]|\S*[^\w\-\s]))([\w\-]{11})[?=&+%\w-]*/ig;

মূলত রাজারুনার উদাহরণগুলিতে উল্লেখ হওয়া সমস্তগুলি কেস পরিচালনা করে, এবং ইউআরএল পরে 11 টি অক্ষরের ক্রম থাকতে পারে এমন কোনও ইউআরএল হ্যান্ডেল করে। অর্থাত:

http://www.youtube.com/watch?v=GUEZCxBcM78&feature=pyv&feature=pyv&ad=10059374899&kw=%2Bwingsuit

এখানে একটি কার্যকারী নমুনা যা ইউটিউব url এর সমস্ত নমুনা পরীক্ষা করে:

http://jsfiddle.net/DJSwc/5/


2

চেষ্টা করুন

[^\s]*youtube\.com[^\s]*?v=([-\w]+)[^\s]*

প্রথম ক্যাপচারিং গ্রুপে আপনি ভিডিও আইডি পাবেন। আমি যা জানি না তা একটি বৈধ ভিডিও আইডি কী? এই মুহুর্তে আমি সমস্তগুলি অনুসন্ধান করে v=ক্যাপচার করি -A-Za-z0-9_

আমি এখানে আপনার নমুনা স্ট্রিং সহ রুবারে এটি অনলাইনে চেক করেছি ।


2

ব্যবহার:

<?php

    // The YouTube URL string

    $youtube_url='http://www.youtube.com/watch?v=8VtUYvwktFQ';

    // Use regex to get the video ID

    $regex='#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#';

    preg_match($regex, $youtube_url, $id);

    // Plug that into our HTML
?>

2

ঠিক আছে, আমি আমার নিজস্ব একটি ফাংশন তৈরি করেছি। তবে আমি বিশ্বাস করি এটি বেশ দক্ষ নয়। যে কোনও উন্নতি স্বাগত:

function get_youtube_videos($string) {

    $ids = array();

    // Find all URLs
    preg_match_all('/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/', $string, $links);

    foreach ($links[0] as $link) {
        if (preg_match('~youtube\.com~', $link)) {
            if (preg_match('/[^=]+=([^?]+)/', $link, $id)) {
                $ids[] = $id[1];
            }
        }
    }
    return $ids;
}

আপনি যদি কেবল ইউটিউব ডটকমের লিঙ্কগুলির সন্ধান করছেন তবে আপনি কেন সমস্ত লিঙ্কের সাথে প্রথমে একটি তালিকা তৈরি করতে চান? এবং আমি মনে করি এটি 3 পৃথক regexes ব্যবহার করা প্রয়োজন হয় না।
স্টিমা


1

আসল পোস্টারটিতে "আমি এটি বিশ্লেষণ করতে এবং সমস্ত YouTube ভিডিও URL এবং তাদের আইডিগুলি খুঁজতে চাই asked" আমি উপরের সর্বাধিক জনপ্রিয় উত্তরটি একটি প্রেগ_ম্যাচটিতে স্যুইচ করেছি এবং ভিডিও আইডি এবং ইউআরএল ফিরিয়ে দিয়েছি।

পোস্টটি থেকে ইউটিউব ইউআরএল এবং আইডি পান:

$match[0] = Full URL
$match[1] = video ID

function get_youtube_id($input) {
    $input = preg_match('~https?://(?:[0-9A-Z-]+\.)?(?:youtu\.be/|youtube(?:-nocookie)?\.com\S*[^\w\s-])([\w-]{11})(?=[^\w-]|$)(?![?=&+%\w.-]*(?:[\'"][^<>]*>|</a>))[?=&+%\w.-]*~ix',
                        $input, $match);
    return $match;
}

0

কোনও স্ট্রিং থেকে সহজেই YouTube লিঙ্কটি সন্ধান করুন:

function my_url_search($se_action_data)
{
    $regex = '/https?\:\/\/[^\" ]+/i';
    preg_match_all($regex, $se_action_data, $matches);
    $get_url=array_reverse($matches[0]);
    return array_unique($get_url);
}
echo my_url_search($se_action_data)

এটি কেবল YoutTube এর জন্য নয়, এটি সামগ্রীর অন্যান্য url- এর সাথে মিলবে।
রহিল উজির

0
String urlid="" ;
String  url="http://www.youtube.com/watch?v=0zM4nApSvMg#t=0m10s";
Pattern pattern =Pattern.compile("(?:http|https|)(?::\\/\\/|)(?:www.|)(?:youtu\\.be\\/|youtube\\.com(?:\\/embed\\/|\\/v\\/|\\/watch\\?v=|\\/ytscreeningroom\\?v=|\\/feeds\\/api\\/videos\\/|\\/user\\\\S*[^\\w\\-\\s]|\\S*[^\\w\\-\\s]))([\\w\\-\\_]{11})[a-z0-9;:@#?&%=+\\/\\$_.-]*");
Matcher result = pattern.matcher(url);
    if (result.find())
    {
         urlid=result.group(1);

    }

জাভাতে এই কোডটি বর্তমানে সমস্ত ইউটিউব ইউআরএলগুলির জন্য একেবারে সূক্ষ্ম কাজ করে।

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