youtube链接的正则表达式

jro*_*rom 33 regex youtube

有人有一个正则表达式,从(几乎)链接到Youtube的所有可能方式获得Youtube视频(不是嵌入对象)的链接吗?

我认为这是一个非常常见的问题,我确信有很多方法可以将其联系起来.

一个起点是:

jro*_*rom 52

到目前为止,我已经Regular expression为我发布的示例工作了,它获得了第一组的ID:

http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)???[\w\???=]*)?
Run Code Online (Sandbox Code Playgroud)

  • @yourfriendzak - `(\ w*)`变成`([\ w\ - ] +)`.我也允许在我的正则表达式中使用SSL.这是我目前在PHP中使用的正则表达式:`http(?:s?)://(?:www \.)?youtu(?:be\.com/watch \?v = |\.be /)([\ W\ - ] +)(&(安培;)[\ W\=?]*)`? (5认同)
  • 从这里的评论来看,我现在提出的最好的是`http(?:s?):\ /\/(?:www \.)?youtu(?:be\.com\/ watch \?v = |\.BE\/)([\ W\ - \_]*)(&(安培;)[\ W\=?]*)`? (3认同)
  • 我将标识符子模式更改为需要一个或多个字符,并包含短划线字符:`([\ w\ - ] +)` (2认同)
  • `\ w*`不包括所有有效的Youtube ID,也可以有连字符和下划线字符.`[\ w\ - \_]*`将是一个合适的替代品.`/ HTTP:\ /\/(?:WWW \)youtu(:是\ .COM\/手表\ V = |\.BE\/?)([\ w\ - \_]*)(? &(amp;)?[\ w \?=]*)?/`应该找到所有有效的ID.我不得不把它改成文字做我正在做的事情,不记得我需要哪些逃脱.我可以试着用正则表达式找到它们,但...... (2认同)

bru*_*les 13

您可以在下面使用此表达式.

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

我正在使用它,它涵盖了最常用的URL.我将继续在这个要点上更新它.您可以在此工具上进行测试.


Sou*_*khi 9

我最喜欢 @brunodles 的解决方案,但您仍然可以匹配非视频链接,例如https://www.youtube.com/feed/subscriptions

我采用了这个解决方案

(?:https?:\/\/)?(?:www\.)?youtu(?:\.be\/|be.com\/\S*(?:watch|embed)(?:(?:(?=\/[-a-zA-Z0-9_]{11,}(?!\S))\/)|(?:\S*v=|v\/)))([-a-zA-Z0-9_]{11,})
Run Code Online (Sandbox Code Playgroud)

它还可用于匹配多个空格分隔的链接。视频 ID 将在第一组中捕获。

使用以下网址进行测试:

youtu.be/iwGFalTRHDA
youtube.com/watch?v=iwGFalTRHDA
www.youtube.com/watch?v=iwGFalTRHDA
http://www.youtube.com/watch?v=iwGFalTRHDA
https://www.youtube.com/watch?v=iwGFalTRHDA
https://www.youtube.com/watch?v=MoBL33GT9S8&feature=share
https://www.youtube.com/embed/watch?feature=player_embedded&v=iwGFalTRHDA
https://www.youtube.com/embed/watch?v=iwGFalTRHDA
https://www.youtube.com/embed/v=iwGFalTRHDA
https://www.youtube.com/watch/iwGFalTRHDA
http://www.youtube.com/attribution_link?u=/watch?v=aGmiw_rrNxk&feature=share
https://m.youtube.com/watch?v=iwGFalTRHDA

// will not match
https://www.youtube.com/feed/subscriptions
https://www.youtube.com/channel/UCgc00bfF_PvO_2AvqJZHXFg
https://www.youtube.com/c/NatGeoEdOrg/videos
Run Code Online (Sandbox Code Playgroud)

https://regex101.com/r/rq2KLv/1


小智 5

我改进了上面与朋友发布的链接,我为IRC编写的脚本甚至可以识别没有http的链接.它适用于我到目前为止所有压力测试,包括乱码文本与几乎无法识别的YouTube网址,所以这里是:

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