एक उदाहरण के रूप में इन यूआरएल लेते हैं:RegEx पैटर्न किसी भी यूट्यूब यूआरएल से यूट्यूब वीडियो आईडी प्राप्त करने के लिए
- http://www.youtube.com/watch?v=8GqqjVXhfMU&feature=youtube_gdata_player
- http://www.youtube.com/watch?v=8GqqjVXhfMU
यह पीएचपी समारोह नहीं ठीक से आईडी प्राप्त करेंगे मामला 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 की आवश्यकता नहीं होगी। क्या यह आधार बंद है? अंक शुरू करने के लिए कोई विचार?
मुझे लगता है कि इस पैटर्न के साथ मुख्य समस्या केवल पैटर्न के अंत में $ $ है, जो स्ट्रिंग के परीक्षण के अंत में पैटर्न को एंकर करती है। यही कारण है कि केस 1 मेल नहीं खाता है, क्योंकि यह आईडी के साथ समाप्त नहीं होता है। – Bendoh