दिलचस्प पोस्ट
जावा 8 स्ट्रीम का विभाजन PHP / अपाचे / लिनक्स प्रसंग में, वास्तव में 777 खतरनाक क्यों है? पायथन समूह द्वारा एक WCF सेवा के लिए प्रपत्र प्रमाणीकरण कुकी पासिंग सर्कल के अंदर अंक चुनने के लिए MySQL स्थानिक एक्सटेंशन का उपयोग करें जावा संकुल कॉम और संगठन खड़ी स्क्रॉल पर आधारित jquery के साथ कक्षा जोड़ें / निकालें? मैं 21.4 के रूप में 21.499999618530273 जैसे कुछ मान के लिए एक डबल वैरिएबल प्रारंभिक क्यों देखूं? MySQL प्रकार पाठ के लिए अधिकतम लंबाई कोणीय 2 बाह्य आदानों JQuery के साथ तत्व पर मँडरा अगर पता लगाएँ सी में तार करने के लिए enum नाम कन्वर्ट करने के लिए कैसे Google Apps स्क्रिप्ट में अधिकतम निष्पादन समय बढ़ गया स्कैनर अंतरिक्ष के बाद नहीं देखता है SQL सर्वर 2008 में पृष्ठ पर अंक लगाना कैसे करें

किसी भी यूट्यूब यूआरएल से यूट्यूब वीडियो आईडी प्राप्त करने के लिए RegEx पैटर्न

हम इन यूआरएल को एक उदाहरण के रूप में लेते हैं:

  1. http://www.youtube.com/watch?v=8GqqjVXhfMU&feature=youtube_gdata_player
  2. http://www.youtube.com/watch?v=8GqqjVXhfMU

यह PHP फ़ंक्शन 1 के मामले में आईडी को ठीक से प्राप्त नहीं करेगा, लेकिन मामले में 2. केस 1 बहुत आम है, जहां यूट्यूब आईडी के पीछे कुछ भी आ सकता है।

/** * get YouTube video ID from URL * * @param string $url * @return string YouTube video id or FALSE if none found. */ function youtube_id_from_url($url) { $pattern = '%^# Match any YouTube URL (?:https?://)? # Optional scheme. Either http or https (?:www\.)? # Optional www subdomain (?: # Group host alternatives youtu\.be/ # Either youtu.be, | youtube\.com # or youtube.com (?: # Group path alternatives /embed/ # Either /embed/ | /v/ # or /v/ | /watch\?v= # or /watch\?v= ) # End path alternatives. ) # End host alternatives. ([\w-]{10,12}) # Allow 10-12 for 11 char YouTube id. $%x' ; $result = preg_match($pattern, $url, $matches); if (false !== $result) { return $matches[1]; } return false; } 

मैं क्या सोच रहा हूं कि ऐसा कोई तरीका होना चाहिए जहां मैं "v =" के लिए देख सकता हूं, चाहे वह यूआरएल में कहीं भी न हो, और उसके बाद के अक्षर ले लें। इस तरीके से कोई जटिल RegEx की आवश्यकता नहीं होगी। क्या यह बंद आधार है? शुरुआती अंक के लिए कोई विचार?

वेब के समाधान से एकत्रित समाधान "किसी भी यूट्यूब यूआरएल से यूट्यूब वीडियो आईडी प्राप्त करने के लिए RegEx पैटर्न"

 if (preg_match('/youtube\.com\/watch\?v=([^\&\?\/]+)/', $url, $id)) { $values = $id[1]; } else if (preg_match('/youtube\.com\/embed\/([^\&\?\/]+)/', $url, $id)) { $values = $id[1]; } else if (preg_match('/youtube\.com\/v\/([^\&\?\/]+)/', $url, $id)) { $values = $id[1]; } else if (preg_match('/youtu\.be\/([^\&\?\/]+)/', $url, $id)) { $values = $id[1]; } else if (preg_match('/youtube\.com\/verify_age\?next_url=\/watch%3Fv%3D([^\&\?\/]+)/', $url, $id)) { $values = $id[1]; } else { // not an youtube video } 

यूट्यूब यूआरएल से आईडी निकालने के लिए मैं यही उपयोग करता हूं। मुझे लगता है कि यह सभी मामलों में काम करता है

ध्यान दें कि अंत में $ मूल्य = वीडियो का आईडी

रेगेक्स के बजाय मैं hightly parse_url() और parse_str() की सिफारिश:

 $url = "http://www.youtube.com/watch?v=8GqqjVXhfMU&feature=youtube_gdata_player"; parse_str(parse_url( $url, PHP_URL_QUERY ), $vars ); echo $vars['v']; 

किया हुआ

आप सिर्फ parse_url और parse_str प्रयोग कर सकते हैं:

 $query_string = parse_url($url, PHP_URL_QUERY); parse_str($query_string); echo $v; 

एक और आसान तरीका parse_str() का उपयोग कर रहा है:

 <?php $url = 'http://www.youtube.com/watch?v=8GqqjVXhfMU&feature=youtube_gdata_player'; parse_str($url, $yt); // The associative array $yt now contains all of the key-value pairs from the querystring (along with the base 'watch' URL, but doesn't seem you need that) echo $yt['v']; // echos '8GqqjVXhfMU'; ?> 

Parse_url सुझाव अच्छे हैं I यदि आप वास्तव में एक regex चाहते हैं तो आप इसका उपयोग कर सकते हैं:

 /(?<=v=)[^&]+/` 

मैंने निम्नलिखित नमूनों का इस्तेमाल किया है क्योंकि यूट्यूब में एक यूट्यूब- nocookie.com डोमेन भी है:

 '@youtube(?:-nocookie)?\.com/watch[#\?].*?v=([^"\& ]+)@i', '@youtube(?:-nocookie)?\.com/embed/([^"\&\? ]+)@i', '@youtube(?:-nocookie)?\.com/v/([^"\&\? ]+)@i', '@youtube(?:-nocookie)?\.com/\?v=([^"\& ]+)@i', '@youtu\.be/([^"\&\? ]+)@i', '@gdata\.youtube\.com/feeds/api/videos/([^"\&\? ]+)@i', 

आपके मामले में इसका मतलब केवल नियमित यूट्यूब.com यूआरएल के लिए एक वैकल्पिक (-नोकूकी) के साथ मौजूदा एक्सप्रेशंस को विस्तारित करने का मतलब होगा:

 if (preg_match('/youtube(?:-nocookie)\.com\/watch\?v=([^\&\?\/]+)/', $url, $id)) { 

यदि आप अंतिम $ में शामिल न होने के लिए अपना प्रस्तावित अभिव्यक्ति बदलते हैं, तो यह आपके जैसा काम करना चाहिए मैंने -नोकुकी को भी जोड़ा

 /** * get YouTube video ID from URL * * @param string $url * @return string YouTube video id or FALSE if none found. */ function youtube_id_from_url($url) { $pattern = '%^# Match any YouTube URL (?:https?://)? # Optional scheme. Either http or https (?:www\.)? # Optional www subdomain (?: # Group host alternatives youtu\.be/ # Either youtu.be, |youtube(?:-nocookie)?\.com # or youtube.com and youtube-nocookie (?: # Group path alternatives /embed/ # Either /embed/ | /v/ # or /v/ | /watch\?v= # or /watch\?v= ) # End path alternatives. ) # End host alternatives. ([\w-]{10,12}) # Allow 10-12 for 11 char YouTube id. %x' ; $result = preg_match($pattern, $url, $matches); if (false !== $result) { return $matches[1]; } return false; } 

किसी भी यूट्यूब लिंक के लिए समाधान:

 http://youtube.com/v/dQw4w9WgXcQ http://youtube.com/watch?v=dQw4w9WgXcQ http://www.youtube.com/watch?feature=player&v=dQw4w9WgXcQ&var2=bla http://youtu.be/dQw4w9WgXcQ 

==

https://stackoverflow.com/a/20614061/2165415

यहाँ एक समाधान है

 /** * credits goes to: http://stackoverflow.com/questions/11438544/php-regex-for-youtube-video-id * update: mobile link detection */ public function parseYouTubeUrl($url) { $pattern = '#^(?:https?://)?(?:www\.)?(?:m\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch\?v=|/watch\?.+&v=))([\w-]{11})(?:.+)?$#x'; preg_match($pattern, $url, $matches); return (isset($matches[1])) ? $matches[1] : false; } 

यह मोबाइल लिंक से भी निपट सकता है I

यूट्यूब आईडी को पुनः प्राप्त करने के लिए यहां मेरा कार्य है!

 function getYouTubeId($url) { if (!(strpos($url, 'v=') !== false)) return false; $parse = explode('v=', $url); $code = $parse[1]; if (strlen($code) < 11) return false; $code = substr($code, 0, 11); return $code; }