映射器的正则表达式错误

时间:2016-11-22 17:22:16

标签: java regex youtube-api

这是我的mapper中的代码。

 result.put("contentThumbUrl", getThumbUrl(extractor.extract("youtube.videolink").asText(), false));
            result.put("contentThumbSmallUrl", getThumbUrl(extractor.extract("youtube.videolink").asText(), true));

我的功能是:

private String getThumbUrl(String videoId, boolean small) {
        videoId = videoId.replaceAll("http://www\\.youtube\\.([a-z]{2}|[a-z]{3})/watch\\?v=.|https://www\\.youtube\\.([a-z]{2}|[a-z]{3})/watch\\?v=", "");
        if(small) {
            return "http://img.youtube.com/vi/" + videoId + "/2.jpg";
        }
        return "http://img.youtube.com/vi/" + videoId + "/0.jpg";
    }

然而我得到了错误的结果。

"contentThumbSmallUrl":"http:\/\/img.youtube.com\/vi\/https:\/\/www.youtube.com\/watch?v=lEBwKBJ8Leg\/2.jpg"
and 
contentThumbUrl":"http:\/\/img.youtube.com\/vi\/https:\/\/www.youtube.com\/watch?v=lEBwKBJ8Leg\/0.jpg"

无论如何我可以纠正它。我不知道我的正则表达式是否正确。有什么方法可以缩短我的正则表达式吗?

1 个答案:

答案 0 :(得分:0)

我不知道为什么它在该文本上失败了。但是,使用转义斜杠(\/)看起来很奇怪。只需要转义反斜杠(\)。你应该检查你的输入。

我能看到的正则表达式的唯一问题是在上半部分之后的一个无关期间.\\?v=.|https://。它会从视频ID中删除一个额外的字符。

要缩短模式,您可以这样做:

"http(s)?://www\\.youtube\\.([a-z]{2,3})/watch\\?v="

括号是可选的,但有助于提高可读性。

演示:https://regex101.com/r/9gRG8Q/1