2013-04-16 25 views
1

我有一個java類和 我想讀取名稱以「home-search-log.log」開頭的文件。所以我寫了這個代碼。正則表達式來匹配文件名

File dir = new File("D:\\"); 
    File[] foundFiles = dir.listFiles(new FileFilter() { 
    public boolean accept(File file) { 

     return Pattern.compile("^(home-search-log.log)").matcher(file.getName()).matches(); 
    } 
    }); 
    for (File file : foundFiles) { 
     System.out.println(file.getName()); 
    } 

但它只返回一個具有給定名稱的文件。我的其他文件的名稱是「home-search-log.log.2013-04-12」,但它不會被此模式返回。我錯在哪裏?

+0

您是否搜索過SO?有很多以前的答案 –

回答

2

我認爲下面的代碼可以更好:

return file.getName().startsWith("home-search-log.log"); 
+0

'.'是否需要轉義,即'\ .'? –

+0

謝謝..工作.. –

+0

String.startsWith ()只是比較這2個字符串,不需要轉義任何東西 – BlackJoker

0

嘗試這樣:

"^(home-search-log\\.log.*)" 

首先,你需要逃避的正則表達式中使用的特殊字符(「 - 」,「」),並添加結束指定要匹配任何東西」。 *」所以在這種情況下,應該從匹配任何‘家庭搜索log.log’到‘家搜索log.logsomething’

+0

連字符不需要在字符類外逃脫 –

+0

我不知道,thx – Stephan

+0

它說:「無效的轉義序列(有效的轉義序列是\ b \ t \ n \ f \ r \ 「\'\\)」 –

0

使用方法如下:

"home-search-log.log((.\\d[4]-\\d[2]-\\d[2])?)" 
+0

它說「無效的轉義序列(有效的轉義序列是\ b \ t \ n \ f \ r \」\'\\)「 –

+0

我編輯了我的答案。這應該適用於只有日誌文件的情況,如home-search-log.log&home-search-log.log.2013-11-09 – dinukadev

1

請嘗試以下正則表達式。

System.out.println("home-search-log.log.2013-04-12".matches("^home-search-log.*"));