有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我们的系统允许文件夹和文件都可以是regex格式。比如说

/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) 个答案

  1. # 1 楼答案

    使用这个正则表达式模式

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

    这将为您提供根路径,并附加一个条件,即第一个字母应该是一个字母

    如果它也可以是一个数字,您只需使用-

    ^/([a-bA-Z0-9]+)/?.$
    
  2. # 2 楼答案

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

    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/
    

    你可以从那里进行微调