java FilenameFilter正则表达式(展望未来)

时间:2013-08-27 22:19:39

标签: java regex lookahead filefilter

我正在尝试使用FilenameFilter过滤文件以grep目录中的文件文件。

% ls -1
DirFilter.class
DirList.class
DirList.java
doctors.txt
node.l
rels.l

我正在尝试过滤node.lrels.l。当且仅当两个文件都存在时,过滤器才会成功。

我在debuggex.com上尝试了我的正则表达式,它似乎按预期工作: http://www.debuggex.com/embed/CZgVeUE2iWsNfRNG

我的正则表达式:(?s)node.l.?(?=(rels.l))

但是当我通过DirList.java过滤器运行它时,它不起作用..

% java DirList "(?s)node.l.?(?=(rels.l))"
<no-output>

现在我正在使用Thinking in Java中的DirList.java http://www.cs.odu.edu/~cs476/tijava2/c10/DirList.java

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

DirList正在分别针对每个文件名评估您的正则表达式,而不是\n返回的单个ls分隔目录列表字符串。你的正则表达式永远不会在这些条件下匹配,因为它一次看不到多个文件名。

答案 1 :(得分:1)

FilenameFilter适用于单个文件,不适用于文件组,因此正则表达式仅适用于该单个文件。而不是正则表达式尝试可能这样:

  1. 取文件名
    • 如果是node.l,请检查new File(currentDir+"/rels.l").exists()
    • 如果是rels.l,请检查new File(currentDir+"/node.l").exists()