简单的正则表达式提取文件夹

时间:2010-10-01 08:41:33

标签: java regex

覆盖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

因此可能有一个或多个文件夹/子文件夹。基本上我想剥离域名和端口(如果可用)和最后的文件名。

感谢您的时间。

4 个答案:

答案 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]将始终包含您想要的内容,无论是完整网址的文件名。