首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式,匹配还是不匹配?

正则表达式,匹配还是不匹配?
EN

Stack Overflow用户
提问于 2011-06-09 10:47:56
回答 2查看 4.5K关注 0票数 3

我正在尝试做一个嵌入YouTube视频的正则表达式。

现在,这是我能做的基本工作:

代码语言:javascript
复制
http:\/\/www\.youtube\.com\/watch\?.*v=([a-z0-9-_]+)

它具有正常的、可识别的YouTube网址,然后匹配唯一的视频代码。不幸的是,事实证明这对我的用户要求太高了。他们没有输入超文本传输协议,缺少万维网,缺少超文本传输协议和万维网,有时他们输入的是用/v/*替换/watch?v=*,在所有这些情况下,它都会破坏格式。

我尝试做的是允许'youtube.com‘前后的任何东西,这样无论输入是什么,它都是近乎完美的。下面的例子..

代码语言:javascript
复制
http://www.youtube.com/watch?v=([a-z0-9-_]+) --- the normal, unmolested input
http://youtube.com/watch?v=([a-z0-9-_]+) --- missing WWW
www.youtube.com/watch?v=([a-z0-9-_]+) --- missing HTTP
youtube.com/watch?v=([a-z0-9-_]+) --- missing HTTP and WWW
http://www.youtube.com/v/([a-z0-9-_]+) --- substituted watch?v= for /v/
http://youtube.com/v/([a-z0-9-_]+) --- substituted watch?v= for /v/ AND missing WWW 
www.youtube.com/v/([a-z0-9-_]+) --- substituted watch?v= for /v/ AND missing HTTP
youtube.com/v/([a-z0-9-_]+) --- substituted watch?v= for /v/ AND missing HTTP and WWW

这是一个我认为它应该可以工作的改变(允许任何字符),但也许我遗漏了什么?

代码语言:javascript
复制
[.]+\youtube\.com\/[.]+([a-z0-9-_]+)

我为我的含糊或无知道歉,但是我已经尝试了几次修改,但都没有效果。也许我正在寻找的东西是不可能的。老实说,我试着理解正则表达式,也许是时间的问题,也可能是我的问题,但我无法破译它。从我的角度来看,这是非常隐秘的。

我真诚地感谢每一位抽出时间的人..

EN

回答 2

Stack Overflow用户

发布于 2011-06-09 10:51:19

这个应该可以..。

代码语言:javascript
复制
(?:http://)?(?:www\.)?youtube\.com/(?:watch\?v=|v/)([\w-]+)

RegExr

这将匹配URL,并将YouTube视频id放入捕获组1中。

它首先匹配一个可能的http://,然后匹配一个可能的www.,然后总是匹配youtube.com/,然后匹配watch?v=v/,然后匹配\w字符类和-

票数 3
EN

Stack Overflow用户

发布于 2011-06-09 10:55:58

在字符类中,.不是一个特殊字符,它的字面意思是一个点。因此[.]+的意思是“一个或多个点”。我不知道你可能会遇到什么其他问题,但它应该是.+ (或者可能是.*,因为"youtube“可以是字符串的开头)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6287584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档