【问题标题】:java FilenameFilter regex (look ahead)java FilenameFilter 正则表达式(向前看)
【发布时间】:2013-08-27 22:19:39
【问题描述】:

我正在尝试使用 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

有什么想法吗?

【问题讨论】:

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

标签: java regex lookahead filefilter


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    FilenameFilter 适用于单个文件而不是文件组,因此正则表达式将仅应用于该单个文件。而不是正则表达式尝试这种方式:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      相关资源
      最近更新 更多