Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php youtube频道URL的正则表达式_Php_Regex - Fatal编程技术网

Php youtube频道URL的正则表达式

Php youtube频道URL的正则表达式,php,regex,Php,Regex,如何使用正则表达式验证youtube频道URL 我找到了这个模式,但它不能正常工作 /((http|https):\/\/|)(www.|)youtube\.com\/(channel\/|user\/|)[a-zA-Z0-9]{1,}/ 有人能帮我吗?您的问题是user\/ 以下是更正后的正则表达式: ((http|https):\/\/|)(www\.|)youtube\.com\/(channel\/|user\/)[a-zA-Z0-9_-]{1,} 这是一个问题,因为它使(通道|用户

如何使用正则表达式验证youtube频道URL

我找到了这个模式,但它不能正常工作

/((http|https):\/\/|)(www.|)youtube\.com\/(channel\/|user\/|)[a-zA-Z0-9]{1,}/

有人能帮我吗?

您的问题是
user\/

以下是更正后的正则表达式:

((http|https):\/\/|)(www\.|)youtube\.com\/(channel\/|user\/)[a-zA-Z0-9_-]{1,}
这是一个问题,因为它使(通道|用户)成为可选的

编写此正则表达式的更好方法是

(https?:\/\/)?(www\.)?youtube\.com\/(channel|user)\/[\w-]+

要从youtube URL获取频道名称或频道id,请使用:

(?:https|http)\:\/\/(?:[\w]+\.)?youtube\.com\/(?:c\/|channel\/|user\/)?([a-zA-Z0-9\-]{1,})
工作对象:


频道ID以“UC”开头。我不知道还有什么其他方法可以识别频道ID和频道名称。

我发现对我来说最好的解决方案是

/(https?:\/\/)?(www\.)?youtu((\.be)|(be\..{2,5}))\/((user)|(channel))\/?([a-zA-Z0-9\-_]{1,})/
这适用于

http://www.youtube.com/channel/uc_fglsfl
http://youtube.co.uk/channel/asdasgfgjd
https://youtube.com/channel/ghjgk+öää,
https://youtube.net/channel/43568&gsldkfj
https://youtube.de/channel/dtgzu&&dadg 
http://youtube.com/channel/vgujsgh&as=gr
http://youtube.com/channel/xdfhxfgu

let str = 'http://www.youtube.com/channel/uc_fglsfl'
let pattern = '/(https?:\/\/)?(www\.)?youtu((\.be)|(be\..{2,5}))\/((user)|(channel))\/?([a-zA-Z0-9\-_]{1,})/'
let matchs = str.match(pattern)
//result id
matchs[9]

经过深入研究,我提出了以下正则表达式:

^https?:\/\/(www\.)?youtube\.com\/(channel\/UC[\w-]{21}[AQgw]|(c\/|user\/)?[\w-]+)$
它允许:

  • https
    http
  • www.
    是否
  • channel/
    URL(自2015年起)
  • user/
    URL(旧版)
  • 自定义(
    c/
    )URL(自2016年起)
  • 短URL(
    user/
    c/
    已删除)
它还验证通道ID,因为它们遵循以下模式:

  • 从UC开始
  • 21个字符的
    [0-9a-zA-Z_u-]
    (与
    [\w-]
    相同)
  • [AQgw]
通过以下方式进行测试:

https://www.youtube.com/channel/UCARj2eHnsYMuCZDmYZ5q4_g
https://www.youtube.com/channel/UCUZHFZ9jIKrLroW8LcyJEQQ
https://www.youtube.com/c/YouTubeCreators
https://www.youtube.com/YouTubeCreators
https://www.youtube.com/user/partnersupport
https://www.youtube.com/partnersupport
http://www.youtube.com/partnersupport
https://youtube.com/partnersupport
http://youtube.com/partnersupport
资料来源:


“它不能正常工作”-它如何不能正常工作?当我在用户末尾添加“s”(不带引号)时,我没有收到错误消息为什么你没有逃过第一个
?谢谢你,我从原始代码中删除了管道,它工作了/((http | https):\/\/|)(www.124;)youtube\.com\/(channel\/| user\/)[a-zA-Z0-9]{1,}/将uu添加到通道的正则表达式示例:还要注意,通道id也以UC开头通道id也可以包含破折号。示例(假链接,但格式与真实链接类似):更新的正则表达式:
((http | https):\/\/)?(www\.|)youtube\.com\/channel\/([a-zA-Z0-9\-]{1,})
@ThomasRoss nice,但您的更新缺少下划线,Julien提到了这一点。我做了一点编辑以抑制不太重要的捕获,并强制频道id的第一个字符为大写:
(?:(?:http | https):\/\/\/\)(?:www\.|)youtube\.com\/(频道|用户)\/([A-Z][A-zA-Z0-9\-\\\/{1,})