代码之家  ›  专栏  ›  技术社区  ›  Adnan

简单regex提取文件夹

  •  3
  • Adnan  · 技术社区  · 14 年前

    什么是最有效的方法来覆盖所有案例以检索 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 回复  |  直到 14 年前
        1
  •  3
  •   splash    14 年前

    那呢? 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());
    
        2
  •  1
  •   Tim Pietzcker    14 年前

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

        3
  •  0
  •   Alan Haggai Alavi    14 年前
    ^.+/([^/]+/[^/]+)/[^/]+$
    
        4
  •  0
  •   flaab    14 年前

    从URL获取最后两个目录的最佳方法如下:

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

    如果匹配,$matches[1]将始终包含所需内容,无论完整URL的文件名如何。