使用regex java检索嵌入的YouTube视频ID

时间:2017-05-14 11:11:36

标签: java regex

我正在尝试使用正则表达式来检索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包括“/”或“?”和其余的字符串。

使用正则表达式有没有好的方法?

谢谢!

3 个答案:

答案 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

Ideone demo