我正在尝试使用正则表达式来检索youtube视频ID(嵌入式)
假设以下网址:
http://www.youtube.com/embed/f0Cn2g8ekMQ/
http://www.youtube.com/embed/f0Cn2g8ekMQ//
http://www.youtube.com/embed/f0Cn2g8ekMQ?param
我想获得ID“f0Cn2g8ekMQ”。
我试图这样做:
regex: https?://www\.youtube\.com/embed/(\S+)[/|\?]?.*
但似乎or运算符对我不起作用,我收到的ID包括“/”或“?”和其余的字符串。
使用正则表达式有没有好的方法?
谢谢!
答案 0 :(得分:1)
这对你有用。请注意转义的/
(斜杠)
/https?:\/\/www\.youtube\.com\/embed\/([^\/?]+)/g
https://regex101.com/r/57JeRU/1
有关详细信息,还请检查代码生成器是否为JAVA。
答案 1 :(得分:0)
如果你确定url的结构总是遵循你使用的例子,你可以使用它:
try{
String add1 = "http://www.youtube.com/embed/f0Cn2g8ekMQ/";
String add2 = "http://www.youtube.com/embed/f0Cn2g8ekMQ//";
String add3 = "http://www.youtube.com/embed/f0Cn2g8ekMQ?param";
String []all1 = add1.replace("//", "/").split("[/?]");
String []all2 = add2.replace("//", "/").split("[/?]");
String []all3 = add3.replace("//", "/").split("[/?]");
System.out.println(all1[3]);
System.out.println(all2[3]);
System.out.println(all3[3]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("URL format changed");
//Do other things here if url structure changes
}
<强> 输出 强>
f0Cn2g8ekMQ
f0Cn2g8ekMQ
f0Cn2g8ekMQ
答案 2 :(得分:0)
你可以使用这个正则表达式\/embed\/(\w+)[\/?]
而不是你可以得到这样的结果:
String[] str = {"http://www.youtube.com/embed/f0Cn2g8ekMQ/",
"http://www.youtube.com/embed/f0Cn2g8ekMQ//",
"http://www.youtube.com/embed/f0Cn2g8ekMQ?param"};
Pattern p = Pattern.compile("\\/embed\\/(\\w+)[\\/?]");
Matcher m;
for (String s : str) {
m = p.matcher(s);
if (m.find()) {
System.out.println(m.group(1));
}
}
<强>输出强>
f0Cn2g8ekMQ
f0Cn2g8ekMQ
f0Cn2g8ekMQ