我有这个正则表达式
((?: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.jpg
和mhgegg.png
之外的所有内容,即图片名称和扩展名。
请这可以实现吗?
我实际上从我在线获取的json文件中获取此链接。 我真正想做的是:
String regex; //regex to match everything except image name and extension.
String imageName = IMAGEURL.replaceAll(regex, "")
因此,如果我记录imageName
,我想获得jajc1agiCJFXXXXb8XVXXq6xXFXXX6.jpg
和mhgegg.png
答案 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"在它的任何部分。