2012-07-20 9 views
5

से यूट्यूब वीडियो की स्ट्रिपिंग आईडी मैं वर्तमान में वाईटी वीडियो आईडी को अलग करने के लिए रेगेक्स कोड का उपयोग कर रहा हूं। कारण मैं regex का उपयोग कर रहा हूं यह है कि yt वीडियो यूआरएल कई प्रारूपों में भिन्न होता है। मैंने एक रेगेक्स बनाया है जो नीचे दिए गए को छोड़कर लगभग सभी वाईटी यूआरएल प्रारूपों की आईडी का पता लगाएगा। मैंने इसे संशोधित करने की कोशिश की है लेकिन कोई भाग्य नहीं है। क्या Regex आईडी को नीचे दिए गए यूआरएल से स्ट्रिप करने का कोई तरीका है?रेगेक्स: यूआरएल

http://www.youtube.com/watch?feature=v-feature&v=317a815FLWQ

Regex:

('~https?://(?:[0-9A-Z-]+\.)?(?:youtu\.be/| youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w]*(?:[\'"][^<>]*>| </a>))[?=&+%\w]*~ix','http://www.youtube.com/watch?v=$1',$url); 
+0

क्वेरी स्ट्रिंग को पढ़ने के लिए अपनी भाषा के यूआरएल पार्सिंग फ़ंक्शंस का उपयोग करें। –

उत्तर

3

कैसे एक स्ट्रिंग ऑपरेशन के बारे में? आपको "v =" मिलना होगा और अगले "&" तक पढ़ना शुरू करना होगा? है कि आप वीडियो आईडी आप आसानी से यूआरएल बाद में

-1

आप क्यों नहीं बस

$url = "http://www.youtube.com/watch?feature=v-feature&v=317a815FLWQ&hello=ok"; 
$stop = strlen($url); 
$pos = strpos($url,'v=')+2; 
$x = strpos($url,'&',$pos); 
if($x) 
    { 
    $x = $x - $pos; 
    $stop = $x; 
    } 
$str = substr($url,$pos,$stop); 
echo $str; 

यह मूल रूप से हमेशा av साथ शुरू होता है = ....

+0

क्योंकि सभी यूट्यूब यूआरएल भिन्नताओं में वीडियो आईडी से पहले "v =" शामिल नहीं है। –

0

निम्नलिखित नहीं है बना सकते हैं देना होगा और चाहिए काम:

(&|\?)v=(\w*)(&|$) 

यह हो जाता है जो कुछ भी & या ?, तो आईडी और फिर अगले & या अंत के साथ शुरू होता है।

मुझे PHP बहुत कुछ नहीं पता, लेकिन मैं देख सकता हूं कि आप तारों को प्रतिस्थापित करने की कोशिश कर रहे हैं। यह पूरी तरह से काम नहीं करना चाहिए। मुझे लगता है कि आपको क्या करना चाहिए यह है कि निम्न के साथ मिलान प्राप्त करें और इसे अपना स्वयं का यूआरएल बनाने के लिए स्ट्रिंग में जोड़ें।

preg_match('(&|\?)v=(\w*)(&|$)', $url, $matches); 
$res = 'http://www.youtube.com/watch?v=' + $matches[1] 

और फिर $ res जो यूआरएल चाहता है।

function getYouTubeId($url) 
    { 
     $pattern = '#^(?:https?://|//)?(?:www\.|m\.)?(?:youtu\.be/|youtube\.com/(?:embed/|v/|watch\?v=|watch\?.+&v=))([\w-]{11})(?![\w-])#'; 
     preg_match($pattern, $url, $matches); 
     return (isset($matches[1])) ? $matches[1] : false; 
    } 

इन बदलावों के साथ परीक्षण किया गया:

+0

धन्यवाद, क्या आप कृपया मुझे बता सकते हैं कि रेगेक्स के किस हिस्से में मैं इसे जोड़ सकता हूं? – techAddict82

+0

यह केवल वह रेगेक्स है जिसे आपको आईडी प्राप्त करने की आवश्यकता है। इस मामले में आईडी $ 2 होगी। –

+0

+1 धन्यवाद लेकिन अगर मैं अपने स्वरूपित यूआरएल के अंत में आईडी को इस तरह कुछ जोड़ना चाहता हूं: '(' (& | \?) V = (\ w *) (& | $) ',' http://www.youtube.com/watch?v=$2 ', $ url);' क्या यह सही है? – techAddict82

0

FYI करें मैं इस कोड है जो विविधताओं मैं खोजने के लिए सक्षम किया गया है सभी के लिए काम करता है का उपयोग

http://www.youtube.com/watch?v=-wtIMTCHWuI 
http://www.youtube.com/v/-wtIMTCHWuI?version=3&autohide=1 
http://youtu.be/-wtIMTCHWuI 
https://www.youtube.com/embed/-wtIMTCHWuI 

मूलतः this post थोड़ी देर से समारोह पाया पहले।