2012-07-19 169 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]+)/?.$