2013-08-27 48 views
0

我想使用FilenameFilter过滤文件来grep目录中的文件文件。java FilenameFilter正则表达式(向前看)

% 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> 

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

思考210

任何想法?

+0

我没有看到代码的链接'DirFilter'类中的任何正则表达式的方法。 'return f.indexOf(afn)!= -1;'不使用正则表达式。 – Pshemo

回答

1

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

+0

谢谢你有道理。 – manish

1

FilenameFilter适用于单个文件而不适用于文件组,因此正则表达式将仅应用于该单个文件。代替正则表达式的尝试也许是这样的:文件

      1. 取的名字,如果它是node.l检查new File(currentDir+"/rels.l").exists()
      2. 如果是rels.l请检查是否new File(currentDir+"/node.l").exists()