我正在尝试使用正则表达式来嵌入YouTube视频。
现在,这是我的基本工作:
http:\/\/www\.youtube\.com\/watch\?.*v=([a-z0-9-_]+)
它具有正常的,已识别的YouTube网址,然后匹配唯一的视频代码。不幸的是,这证明了对我的用户提出太多要求。他们输入它缺少HTTP,缺少WWW,缺少HTTP和WWW,有时他们输入它替换/ watch?v = * with / v / *并且在所有这些情况下它都会破坏格式..
我想要做的是允许“youtube.com”之前和之后的任何内容,以便无论输入如何,它都将接近完美。以下示例..
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
这是一个我认为应该有效的改动(允许任何角色),但也许我错过了什么?
[.]+\youtube\.com\/[.]+([a-z0-9-_]+)
如果我模糊或无知,我道歉,但是我尝试了几次改动而且从未奏效。也许我正在寻找的是不可能的。我老老实实地试过了解正则表达式,也许是时间,也许只是我,但我无法破译它。从我的角度来看,它已经超出了神秘面纱。
我真诚地感谢那些不遗余力的人......
答案 0 :(得分:3)
应该这样做......
(?:http://)?(?:www\.)?youtube\.com/(?:watch\?v=|v/)([\w-]+)
这将匹配网址,并将YouTube视频ID设置为捕获组1。
匹配可能的http://
,然后匹配www.
,然后始终youtube.com/
,然后匹配watch?v=
或v/
,然后匹配{ {1}}字符类和\w
。
答案 1 :(得分:0)
在字符类中,.
不是特殊字符,它实际上是一个点。 [.]+
因此意味着“一个或多个点”。我不知道你可能遇到的任何其他问题,但它应该是.+
(或者可能.*
,因为“youtube”可以是字符串的开头)。