当前位置: 首页 > 知识库问答 >
问题:

当路径和文件名都包含通配符时,列出与正则表达式匹配的文件路径

龙永逸
2023-03-14

我们的系统允许文件夹和文件都可以是正则表达式格式。例如

/dir1*/abcd/efg.? is legal. 

/dir* could match /dira and also /dirb/cde

我想找到与此模式匹配的所有文件。为了消除不必要的操作,我想获取根目录来启动文件列表和筛选。

有没有什么有效的方法来获取正则表达式路径模式的根目录?

几个测试用例:

/abc/def*/bc return /abc
/abc/def*    return /abc
/ab.c/def*   return /
/ab\.c/def*  return /ab.c

共有2个答案

汲灿
2023-03-14

使用此正则表达式模式

^/([a-zA-Z]+[a-bA-Z0-9]+)/?.$

这将为您提供带有额外条件的根路径,即第一个字母应该是一个字母

如果它也可以是一个数字,您可以简单地使用-

^/([a-bA-Z0-9]+)/?.$
齐承运
2023-03-14

已编辑:添加了相对路径的处理

String path;
String root = path.replaceAll( "((?<=/)|((?<=^)(?=\\w)))(?!(\\w|\\\\\\.)+/.*).*", "" ) );

这里有一个测试:

public static void main( String[] args ) throws IOException {
    String[] paths = {"/abc/def*/bc", "/abc/def*", "/ab.c/def*", "/ab\\.c/def*", "abc*", "abc/bc"};
    for ( String path : paths ) {
        System.out.println( path + " --> " + path.replaceAll( "((?<=/)|((?<=^)(?=\\w)))(?!(\\w|\\\\\\.)+/.*).*", "" ) );
    }
}

输出:

/abc/def*/bc --> /abc/
/abc/def* --> /abc/
/ab.c/def* --> /
/ab\.c/def* --> /ab\.c/
abc* --> 
abc/bc --> abc/

您可以从那里对其进行微调。

 类似资料:
  • 问题内容: 与以“ Run”开头且文件扩展名为“ .py”的字符串(在本例中为文件名)匹配的正则表达式是什么? 正则表达式应匹配以下任何一个: 它不应该匹配: 我正在寻找的SQL等效项是。 问题答案: 对于正则表达式,可以使用: 快速说明: 。表示匹配任何字符。 表示匹配上一个字符的任何重复(因此。表示任何字符序列) \是逃避显式点的转义 $表示“字符串结尾”,因此我们不匹配“ Run_foo.p

  • 问题内容: 我列出了大约12万个英语单词(基本上是该语言中的每个单词)。 我需要一个正则表达式,允许使用通配符aka 和来搜索这些单词。 一些例子: 如果用户搜索,它会匹配,例如或或。 如果用户搜索(以结尾的任何单词),则它将匹配或或或。 现在,大多数用户(尤其是对正则表达式不熟悉的用户)都知道,该用户只能替换1个字符,而可以替换0、1个或多个字符。我绝对想基于此构建我的搜索功能。 我的问题是:如

  • 使用指南 - 统计设置 - 概述 - 通配符与正则表达式 1、通配符: 通配符,即 * 符号,可以添加在url中,代替任意字符。假设您添加的网站域名是url.com,则通配符的使用规则如下: 网站域名后不能直接添加通配符,如url.com* 这种方式会提示错误;通配符与域名至少间隔一个字符,如url.com?abab需用url.com?* 来表示; url.com/*,表示包含url.com/ 这

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 我试图检查所选择的路径对于我的Java程序是否是有效的路径。为了有效,它必须与路径< code > E:\ test \(some foldername)\ 匹配。所选择的文件夹可以在该目录中更深。 这是我尝试过的: 我也尝试过将放入,但没有成功。 < code>\b将标记一个单词边界的开始,再次添加< code>\b将关闭它,对吗? <代码>。*将匹配任意字符1到无限次。 那么,逃跑有问题吗?还

  • 我有一根线,比如: 如何匹配每行的最后一个?顺便说一句,这是我试图在Sublime的文本中做到的。这些值不一致,就像我在这里看到的,我有几百行要替换。 我尝试了,但这与相匹配。