覆盖folder1/folder22
从:
http://localhost:8080/folder1/folder22/file.jpg
or
http://domain.com/folder1/folder22/file.jpg
or
http://127.0.0.0.1:8080/folder1/folder22/file.jpg
因此可能有一个或多个文件夹/子文件夹。基本上我想剥离域名和端口(如果可用)和最后的文件名。
感谢您的时间。
答案 0 :(得分:3)
URL班级和getPath()
怎么样?
也许这不是最有效的方式,但我认为最简单的方法之一是:
String[] urls = {
"http://localhost:8080/folder1/folder22/file.jpg",
"http://domain.com/folder1/folder22/file.jpg",
"http://127.0.0.0.1:8080/folder1/folder22/file.jpg" };
for (String url : urls)
System.out.println(new File(new URL(url).getPath()).getParent());
答案 1 :(得分:1)
你可能应该使用Java的URL解析器,但是如果 是一个正则表达式:
\b(?=/).*(?=/[^/\r\n]*)
将在所有示例中与/folder1/folder22
匹配。
try {
Pattern regex = Pattern.compile("\\b(?=/).*(?=/[^/\r\n]*)");
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
ResultString = regexMatcher.group();
}
<强>解释强>
\b
:在单词边界处断言位置(这将在单斜杠之前有效,但不能在斜杠之间或在:
之后
(?=/)
:断言下一个字符是斜线。
.*
:匹配任何内容直到......
(?=/[^/\r\n]*)
:...恰好是最后一个/
(以及除斜线或换行符之外的任何其他内容)。
答案 2 :(得分:0)
^.+/([^/]+/[^/]+)/[^/]+$
答案 3 :(得分:0)
从网址获取最后两个目录的最佳方法如下:
preg_match("/\/([^\/]+\/){2}[^\/]+$/", $path, $matches);
如果匹配,并且$ matches [1]将始终包含您想要的内容,无论是完整网址的文件名。