过滤图像的URL路径(img src)以获取文件名

时间:2015-07-18 21:41:18

标签: java html regex image jsoup

使用JSOUP我解析一个HTML页面,我找到了图像路径,但现在我需要获取图像文件名,这是url路径的一部分。

例如,这是img src:

http://cdn-6.justdogbreeds.com/images/3.gif.pagespeed.ce.MVozFWTz66.gif

文件名为3.gif

我应该使用什么来从URL路径获取名称?也许正则表达式?

我还有其他网址图片:

http://cdn-1.justdogbreeds.com/images/**10.gif**.pagespeed.ce.gsOmm6tF7W.gif
http://cdn-4.justdogbreeds.com/images/**6.gif**.pagespeed.ce.KbjtJ32Zwx.gif
http://cdn-2.justdogbreeds.com/images/**8.gif**.pagespeed.ce.WAWhS-Qb82.gif
http://cdn-3.justdogbreeds.com/images/**7.gif**.pagespeed.ce.UKTkscU8uT.gif

2 个答案:

答案 0 :(得分:2)

您可以将String.lastIndexOf()String.substring()一起使用,而不是正则表达式。

String imgSrc = "http://cdn-1.justdogbreeds.com/images/10.gif.pagespeed.ce.gsOmm6tF7W.gif";
    String imageName = imgSrc.substring(imgSrc.lastIndexOf("/") + 1);
    imageName = imageName.substring(0, imageName.indexOf(".", 3));
    System.out.println(imageName); // prints out 10.gif

这将查找最后出现的正斜杠(/),之后图像名称将开始。字符串的其余部分是完整的图像名称。您只需要10.gif位,因此第2行的其余部分将查找图像名称后的下一个句点。

答案 1 :(得分:1)

您可以使用正则表达式替换来获得所需的值:

String filename = imgsrc.replaceAll("http://[^/]*justdogbreeds.com/images/([^/]*?\\.gif).*", "$1");

使用正则表达式,我们匹配整个网址,并在images/之后和最后(包括)第一个.gif之后捕获文本。 ([^/]*?\\.gif)尽可能少地匹配 0个或更多字符而不是/,然后.gif 。如果您有其他扩展程序,则可以在更改组中枚举它们(例如([^/]*?\\.(?:gif|jpe?g|png)),或使用更通用的模式[^.]+.以外的1个或多个字符< / em>的):

String filename = imgsrc.replaceAll("http://[^/]*justdogbreeds.com/images/([^/]*?\\.[^.]+).*", "$1");

请参阅IDEONE demo

String imgsrc = "http://cdn-1.justdogbreeds.com/images/10.gif.pagespeed.ce.gsOmm6tF7W.gif";
String filename = imgsrc.replaceAll("http://[^/]*justdogbreeds.com/images/([^/]*?\\.gif).*", "$1");
System.out.println(filename);