2010-09-15 7 views
29

Có ai có biểu thức chính quy nhận liên kết đến video Youtube (không phải đối tượng được nhúng) từ (gần như) tất cả các cách liên kết có thể có với Youtube không?Cụm từ thông dụng cho các liên kết youtube

Tôi nghĩ rằng đây là một vấn đề khá phổ biến và tôi chắc chắn có rất nhiều cách để liên kết điều đó.

Một điểm khởi đầu sẽ là:

+0

Bạn đã quên "https://www.youtube.com/embed/UIpuNuV23v0" chưa? – Vishwajeet

Trả lời

42

Cho đến nay tôi đã Regular expression này làm việc cho các ví dụ tôi được đăng, và nó được ID trên nhóm đầu tiên:

http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?‌​[\w\?‌​=]*)? 
+1

Tôi thích rằng nó khớp với các liên kết ngắn quá! – Sonny

+2

Tôi đã thay đổi mẫu con định danh để yêu cầu một hoặc nhiều ký tự, và để bao gồm ký tự dấu gạch ngang: '([\ w \ -] +)' – Sonny

+0

@Sonny, một phần của biểu thức chính quy ở trên là mẫu con định danh? – zakdances

2

Nó muốn được các RegEx dài nhất trên thế giới nếu bạn quản lý để trang trải tất cả các định dạng liên kết, nhưng đây là một để giúp bạn bắt đầu mà sẽ bao gồm các cặp vợ chồng đầu tiên của định dạng liên kết:

http://(www\.)?youtube\.com/watch\?.*v=([a-zA-Z0-9]+).* 

Các nhóm thứ hai sẽ khớp với ID video nếu bạn cần loại bỏ nó.

+0

youtube id có thể chứa dấu gạch ngang ('-'), ở trên không dự đoán được – snachmsm

+0

Nó cũng có thể chứa dấu gạch dưới – Lawrr

5

Tôi đã cải thiện các liên kết được đăng ở trên với một người bạn cho một tập lệnh mà tôi đã viết cho IRC để nhận ra ngay cả các liên kết không có http. Nó hoạt động trên tất cả các bài kiểm tra căng thẳng tôi có cho đến nay, bao gồm văn bản bị cắt xén với url youtube khó nhận ra, vì vậy ở đây là:

~(?:https?://)?(?:www\.)?youtu(?:be\.com/watch\?(?:.*?&(?:amp;)?)?v=|\.be/)([\w\-]+)(?:&(?:amp;)?[\w\?=]*)?~ 
+0

Không hoạt động trong php: 'Cảnh báo: preg_match(): Sửa đổi không xác định '/' trong ...' –

0

này được lặp lại trên các câu trả lời hiện và xử lý các trường hợp cạnh tốt hơn. (ví dụ: http://thisisnotyoutu.be/thing)

/(?:https?:\/\/|www\.|m\.|^)youtu(?:be\.com\/watch\?(?:.*?&(?:amp;)?)?v=|\.be\/)([\w‌​\-]+)(?:&(?:amp;)?[\w\?=]*)?/ 
2

Tôi đã gặp sự cố gần đây với url atttribution_link vì vậy tôi đã thử tạo regex của riêng mình cũng hoạt động cho những người đó.

Đây là chuỗi của tôi regex:

(https?://)?(www\\.)?(yotu\\.be/|youtube\\.com/)?((.+/)?(watch(\\?v=|.+&v=))?(v=)?)([\\w_-]{11})(&.+)? 

và đây là một số trường hợp thử nghiệm tôi đã cố gắng:

http://www.youtube.com/watch?v=iwGFalTRHDA 
https://www.youtube.com/watch?v=iwGFalTRHDA 
http://www.youtube.com/watch?v=iwGFalTRHDA&feature=related 
http://youtu.be/iwGFalTRHDA 
http://www.youtube.com/embed/watch?feature=player_embedded&v=iwGFalTRHDA 
http://www.youtube.com/embed/watch?v=iwGFalTRHDA 
http://www.youtube.com/embed/v=iwGFalTRHDA 
http://www.youtube.com/watch?feature=player_embedded&v=iwGFalTRHDA 
http://www.youtube.com/watch?v=iwGFalTRHDA 
www.youtube.com/watch?v=iwGFalTRHDA 
www.youtu.be/iwGFalTRHDA 
youtu.be/iwGFalTRHDA 
youtube.com/watch?v=iwGFalTRHDA 
http://www.youtube.com/watch/iwGFalTRHDA 
http://www.youtube.com/v/iwGFalTRHDA 
http://www.youtube.com/v/i_GFalTRHDA 
http://www.youtube.com/watch?v=i-GFalTRHDA&feature=related 
http://www.youtube.com/attribution_link?u=/watch?v=aGmiw_rrNxk&feature=share&a=9QlmP1yvjcllp0h3l0NwuA 
http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&u=/watch?v=qYr8opTPSaQ&feature=em-uploademail 
http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&feature=em-uploademail&u=/watch?v=qYr8opTPSaQ 

Cũng nên nhớ để kiểm tra chuỗi bạn nhận được cho url video của bạn, đôi khi nó có thể nhận được các ký tự phần trăm.Nếu vậy, chỉ cần thực hiện điều này

url = [url stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

và cần khắc phục.

cũng nhớ rằng chỉ số của khóa youtube tại là chỉ số 9.

NSRange youtubeKey = [result rangeAtIndex:9]; //the youtube key 
NSString * strKey = [url substringWithRange:youtubeKey] ; 
2

tôi testet tất cả các biểu thức thông thường được đưa ra ở đây và không ai có thể bao gồm tất cả các loại url rằng khách hàng của tôi đã được sử dụng.

Tôi đã xây dựng điều này khá nhiều thông qua thử và sai, nhưng dường như nó hoạt động với tất cả các mẫu mà Poppy Deejay đã đăng.

"(?:.+?)?(?:\/v\/|watch\/|\?v=|\&v=|youtu\.be\/|\/v=|^youtu\.be\/)([a-zA-Z0-9_-]{11})+" 

Có lẽ nó giúp người đang ở trong một tình huống tương tự mà tôi đã ngày hôm nay;)

9

Bạn có thể sử dụng biểu thức này dưới đây.

(?:https?:\/\/)?(?:www\.)?youtu\.?be(?:\.com)?\/?.*(?:watch|embed)?(?:.*v=|v\/|\/)([\w\-_]+)\&? 

Tôi đang sử dụng và bao gồm các URL được sử dụng nhiều nhất. Tôi sẽ tiếp tục cập nhật nó trên This Gist. Bạn có thể kiểm tra nó trên tool này.

+0

Liên kết tới * gist này * không hoạt động nữa. Sử dụng https://gist.github.com/927fd8feaaccdbb9d02b (chỉ ID của ý chính, nó sẽ chuyển hướng bạn) – Sorashi

1

Piggy sao trên Fanmade, điều này bao gồm các liên kết bên dưới bao gồm các phiên bản được mã hóa của url attribution_links:

(?:.+?)?(?:\/v\/|watch\/|\?v=|\&v=|youtu\.be\/|\/v=|^youtu\.be\/|watch\%3Fv\%3D)([a-zA-Z0-9_-]{11})+ 



https://www.youtube.com/attribution_link?a=tolCzpA7CrY&u=%2Fwatch%3Fv%3DMoBL33GT9S8%26feature%3Dshare 
https://www.youtube.com/watch?v=MoBL33GT9S8&feature=share 
http://www.youtube.com/watch?v=iwGFalTRHDA 
https://www.youtube.com/watch?v=iwGFalTRHDA 
http://www.youtube.com/watch?v=iwGFalTRHDA&feature=related 
http://youtu.be/iwGFalTRHDA 
http://www.youtube.com/embed/watch?feature=player_embedded&v=iwGFalTRHDA 
http://www.youtube.com/embed/watch?v=iwGFalTRHDA 
http://www.youtube.com/embed/v=iwGFalTRHDA 
http://www.youtube.com/watch?feature=player_embedded&v=iwGFalTRHDA 
http://www.youtube.com/watch?v=iwGFalTRHDA 
www.youtube.com/watch?v=iwGFalTRHDA 
www.youtu.be/iwGFalTRHDA 
youtu.be/iwGFalTRHDA 
youtube.com/watch?v=iwGFalTRHDA 
http://www.youtube.com/watch/iwGFalTRHDA 
http://www.youtube.com/v/iwGFalTRHDA 
http://www.youtube.com/v/i_GFalTRHDA 
http://www.youtube.com/watch?v=i-GFalTRHDA&feature=related 
http://www.youtube.com/attribution_link?u=/watch?v=aGmiw_rrNxk&feature=share&a=9QlmP1yvjcllp0h3l0NwuA 
http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&u=/watch?v=qYr8opTPSaQ&feature=em-uploademail 
http://www.youtube.com/attribution_link?a=fF1CWYwxCQ4&feature=em-uploademail&u=/watch?v=qYr8opTPSaQ 
+0

Xin chào tất cả, đây là giải pháp chính xác/toàn diện nhất. (2017/tháng 3) – smallufo

+0

Nó vẫn có một số lỗi: nó khớp với dòng bắt đầu, ví dụ, nếu dòng là 'OOXX http: // www.youtube.com/v/iwGFalTRHDA', phần' OOXX 'sẽ là phù hợp. – smallufo

+0

Rất tiếc, nó không thể xử lý danh sách, ví dụ: 'https: //www.youtube.com/watch? V = qrO4YZeyl0I & index = 2 & list = PL5F47FAD7E4D6276E', nó có thể lấy giá trị' v', nhưng không thể khớp với toàn bộ URL. – smallufo

0

đây là giải pháp hoàn chỉnh cho việc Id video youtube cho java hoặc android, tôi đã không tìm thấy bất kỳ liên kết mà không làm việc với chức năng này

public static String getValidYoutubeVideoId(String youtubeUrl) 
{ 
    if(youtubeUrl == null || youtubeUrl.trim().contentEquals("")) 
    { 
     return ""; 
    } 
    youtubeUrl = youtubeUrl.trim(); 
    String validYoutubeVideoId = ""; 
    String regexPattern = "^(?:https?:\\/\\/)?(?:[0-9A-Z-]+\\.)?(?:youtu\\.be\\/|youtube\\.com\\S*[^\\w\\-\\s])([\\w\\-]{11})(?=[^\\w\\-]|$)(?![?=&+%\\w]*(?:['\"][^<>]*>|<\\/a>))[?=&+%\\w]*"; 
    Pattern regexCompiled = Pattern.compile(regexPattern, Pattern.CASE_INSENSITIVE); 
    Matcher regexMatcher = regexCompiled.matcher(youtubeUrl); 
    if(regexMatcher.find()) 
    { 
     try 
     { 
      validYoutubeVideoId = regexMatcher.group(1); 
     } 
     catch(Exception ex) 
     { 
     } 
    } 
    return validYoutubeVideoId; 
} 
0

regex này giải quyết vấn đề của tôi, tôi có thể nhận được liên kết youtube có xem, nhúng hoặc liên kết chia sẻ

(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'<> #]+) 

Bạn có thể kiểm tra tại đây https://regex101.com/r/Kvk0nB/1