Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheCamel:使用File2&\x27制作regex;s包括过滤器_Java_Regex_Apache Camel - Fatal编程技术网

Java ApacheCamel:使用File2&\x27制作regex;s包括过滤器

Java ApacheCamel:使用File2&\x27制作regex;s包括过滤器,java,regex,apache-camel,Java,Regex,Apache Camel,我正在使用Camel处理目录中的文件。但是,我希望我的camel路由只处理名称与特定regex模式匹配的文件。因此,我在File2配置中添加了include选项,并传入了所需的正则表达式 文件名模式的一个示例: 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$ 我要从(…)传递到

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

文件名模式的一个示例:

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$
我要从(…)传递到
文件2
组件的字符串

但是,将忽略所有文件。将正则表达式更改为更简单的正则表达式(如
*\.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.matches
Matcher.matches
(假设这是Camel内部使用的)测试正则表达式,没有任何问题。我正在使用当前的Camel版本2.19.3


编辑2:我试图找到最小的工作模式,而
*?\d{2}-\d{2}\.zip仍然有效,
*?\+\d{2}-\d{2}\.zip
没有。因此,它似乎与
+
符号有关

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

公共类MyFilter实现GenericFileFilter{
@凌驾
公共布尔接受(GenericFile){
如果(file.getFileName()匹配(“^[A-Za-z0-9\+\-\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}+\d{2}-\d{2}-\d{2}\.zip$”)
返回true;
返回false;
}
}
然后可以在过滤器选项中引用bean,如下所示:

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

加号
'+'
被空格
'
替换,即使正则表达式已编码

camel在quartz2组件中使用了这个函数,其中cron表达式由
'+'
分隔:
cron=0/5++*++*+1/1++?++*


解决方法是使用
RAW(^myRegex.+$)

如果
^
匹配字符串的开头,请将其从模式中删除。@WiktorStribiżew正如我上面所写的,我已经在没有
^
的情况下尝试过了。我还在前面添加了一个
*
,但没有成功。谢谢,这很有效。是的,正则表达式确实进行了url编码,但起初我认为这不可能是问题,因为简单正则表达式也是如此(它可以工作)。。所以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;
    }
}
<from uri="file:///someDir?filter=#myFilter" />