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

Java 简单正则表达式提取文件夹,java,regex,Java,Regex,检索folder1/folder22 发件人: 因此,可能有一个或多个文件夹/子文件夹。基本上,我想剥离域名和端口,如果可用和文件名在最后 谢谢您的时间。关于类和getPath()呢 也许这不是最有效的方法,但我认为这是最简单的方法之一: String[] urls = { "http://localhost:8080/folder1/folder22/file.jpg", "http://domain.com/folder1/folder22/file.jpg", "http:

检索
folder1/folder22

发件人:

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

谢谢您的时间。

关于类和
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());

您可能应该为此使用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]*)
:…下面正好是最后一个
/
(以及除斜杠或换行符以外的任何其他内容)。

从url获取最后两个目录的最佳方法是:

preg_match("/\/([^\/]+\/){2}[^\/]+$/", $path, $matches);

如果匹配,$matches[1]将始终包含您想要的内容,无论完整url的文件名是什么。

Thanx Tim Pietzcker,这正是我所需要的。这只适用于两个文件夹,但根据问题的不同,任何数字(>=1)都是可能的。我更喜欢这个方法而不是正则表达式解决方案,因为a)它更容易理解,因为它更明确,b)它是适合这项工作的工具,c)它可能比正则表达式更好地处理边缘情况。
^.+/([^/]+/[^/]+)/[^/]+$
preg_match("/\/([^\/]+\/){2}[^\/]+$/", $path, $matches);