java - Apache Camel : making a regex work with File2's include filter

标签 java regex apache-camel

我正在使用 Camel 处理目录中的文件。但是,我希望我的 Camel 路由仅处理名称与特定正则表达式模式匹配的文件。因此,我将 include 选项添加到 File2 配置中,并传入所需的正则表达式。

文件名模式的示例:

somerandomname-2017-10-02T13-23-42+02-00.zip

我想出的正则表达式:

^[A-Za-z0-9_]+\-\d{4}\-\d{2}\-\d{2}T\d{2}\-\d{2}\-\d{2}\+\d{2}\-\d{2}\.zip$

我传递给 from(...)File2 组件的字符串:

file://...?include=^[A-Za-z0-9_]+\-\d{4}\-\d{2}\-\d{2}T\d{2}\-\d{2}\-\d{2}\+\d{2}\-\d{2}\.zip$&...

但是,所有 文件都会被忽略。当将正则表达式更改为更简单的表达式(例如 .*\.zip)时,它会起作用,因此问题肯定与 include 和我的模式有关。我也尝试过不使用开始和结束运算符(^$),但没有成功:

.*?[A-Za-z0-9_]+\-\d{4}\-\d{2}\-\d{2}T\d{2}\-\d{2}\-\d{2}\+\d{2}\-\d{2}\.zip

感谢任何帮助。

编辑1:我使用String.matchesMatcher.matches测试了正则表达式(假设这是Camel内部使用的),没有任何问题。我正在使用当前的 Camel 版本 2.19.3。

编辑2:我试图找到最小的工作模式,虽然 .*?\d{2}\-\d{2}\.zip 仍然有效,但 .* ?\+\d{2}\-\d{2}\.zip 没有。所以看起来它与+符号有关。

最佳答案

我建议改用过滤选项。这样就可以消除正则表达式被 URL 编码的可能性(我怀疑可能是这种情况)。

public class MyFilter<T> implements GenericFileFilter<T> {
    @Override
    public boolean accept(GenericFile<T> file) {
        if (file.getFileName().matches("^[A-Za-z0-9_]+\-\d{4}\-\d{2}\-\d{2}T\d{2}\-\d{2}\-\d{2}\+\d{2}\-\d{2}\.zip$"))
            return true;
        return false;
    }
}

然后你可以在过滤器选项中引用你的bean,如下所示:

<from uri="file:///someDir?filter=#myFilter" />

关于java - Apache Camel : making a regex work with File2's include filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46524827/

相关文章:

java - JMS 异常 - 无法连接到代理 URL

java - 使用 URL 类加载器执行 jar 文件内容

java - Spring-MVC RequestMapping URITemplate 中的可选路径变量

regex - 如何使用 golang 进行字符串替换

javascript - 正则表达式匹配mongodb中的整个单词

junit - 如何对 Apache Cache Timer 路由进行单元测试?

Java:如何获取一个对象来引用它实例化的对象

java - 在 Spring Boot 1.3.1.RELEASE 中升级到 Hibernate 5.0.6.Final 后嵌入式字段不起作用

java - 对于一组 sql 查询,您如何确定哪个结果集包含特定行?

java - Apache Camel : modify endpoint on redelivery