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

标签 java regex file

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

/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

最佳答案

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

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/

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

关于java - 当路径和文件名都包含通配符时列出与正则表达式匹配的文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11555291/

相关文章:

JAVA - 在 JEditorPane 中设置选定文本的字体

java - 如果数据库查询低于 100 毫秒,我应该线程化吗

java - 如何在xslt文件中调用外部java函数?

java - 使用java计算json文件上的重复数据

php - 使用正则表达式分割管道(|)分隔的字符串,但忽略括号中的管道

python - 捕获数字之间有空格的数字并删除该空格

php - 为什么这个正则表达式会抛出 'PREG_BACKTRACK_LIMIT_ERROR' 错误?

javascript - 加载其文件夹之外的页面(ajax)

php - Laravel fopen() 无法创建/读取文件

python - 如何将列中的整数替换为另一个文件、python 或 awk 中包含的另一个整数