2012-07-19 75 views
4

我们的系统允许文件夹和文件可以是正则表达式格式。例如当路径和文件名都包含通配符时,匹配正则表达式的列表文件路径

/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 
+1

文件/文件夹路径中正则表达式的标准是什么?它和bash一样吗? – nhahtdh 2012-07-19 06:51:10

回答

3

编辑:相对路径

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/ 

您可以从那里微调。

+0

这只是为所有测试用例返回一个空字符串。 – Keppil 2012-07-19 06:54:05

+0

@Keppil我修好了:) – Bohemian 2012-07-19 07:00:00

+0

令人惊叹,谢谢波希米亚人 – StarPinkER 2012-07-19 07:04:03

0

使用此正则表达式

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

这会给你的根路径有一个额外的条件,即第一个字母必须是字母

如果它可以是一个人数太多,你可以简单地使用 -

^/([a-bA-Z0-9]+)/?.$ 
相关问题