正则表达式匹配除图像名称和扩展名以外的所有内容

时间:2016-10-15 09:11:38

标签: java android regex

我有这个正则表达式  ((?:https?\:\/\/)(?:[a-zA-Z]{1}(?:[\w\-]+\.)+(?:[\w]{2,5}))(?:\:[\d]{1,5})?\/(?:[^\s\/]+\/)*(?:[^\s]+\.(?:png|jpe?g|gif|svg|PNG|JPE?G|GIF|SVG))(?:\?\w+=\w+(?:&\w+=\w+)*)?)

从字符串中选择这些图片网址

http://my.a.example.com/kf/urjlsjjsXVXXq6xXFXXX6/20jaa/jajc1agiCJFXXXXb8XVXXq6xXFXXX6.jpg?size=158385&height=79&width=50&hash=13e12eaa837ae8341e35cbde5ea544a

https://example.com/imhgegg.png

我想要的是匹配除jajc1agiCJFXXXXb8XVXXq6xXFXXX6.jpgmhgegg.png之外的所有内容,即图片名称和扩展名。

请这可以实现吗?

修改

我实际上从我在线获取的json文件中获取此链接。 我真正想做的是:

String regex; //regex to match everything except image name and extension.
String imageName = IMAGEURL.replaceAll(regex, "")

因此,如果我记录imageName,我想获得jajc1agiCJFXXXXb8XVXXq6xXFXXX6.jpgmhgegg.png

2 个答案:

答案 0 :(得分:1)

或者,如果您不关心您是否使用RegEx:

必需的导入:

import java.io.File
import java.net.MalformedURLException;
import java.net.URL;

代码:

URL url = new URL("http://my.a.example.com/kf/urjlsjjsXVXXq6xXFXXX6/20jaa/jajc1agiCJFXXXXb8XVXXq6xXFXXX6.jpg?size=158385&height=79&width=50&hash=13e12eaa837ae8341e35cbde5ea544a");

try {
    String fileName = new File(url.getPath()).getName();
    String urlWithNoFileName = url.toString().replace(fileName, "");
    System.out.println("File Name within URL is: " + fileName);
    System.out.println("URL with File Name removed:\n" + urlWithNoFileName);
} 
catch (MalformedURLException ex) {
    //Do what you want with Exception.
}

稍微增加一些开销,但确实有效,它适用于没有扩展名的文件名。

答案 1 :(得分:0)

是的,请检查一下:

(?!.*mhgegg\.png.*)(?!.*jajc1agiCJFXXXXb8XVXXq6xXFXXX6\.jpg.*)((?:https?\:\/\/)(?:[a-zA-Z]{1}(?:[\w\-]+\.)+(?:[\w]{2,5}))(?:\:[\d]{1,5})?\/(?:[^\s\/]+\/)*(?:[^\s]+\.(?:png|jpe?g|gif|svg|PNG|JPE?G|GIF|SVG))(?:\?\w+=\w+(?:&\w+=\w+)*)?)

使用这个你想要的东西将被接受,除了字符串包括" mhgegg.png"和" jajc1agiCJFXXXXb8XVXXq6xXFXXX6.jpg"在它的任何部分。