我正在尝试过滤从 FTP 下载的文件。例如,我想从下载列表中排除扩展名为“.doc”的文件。但我的正则表达式“^(?!.DOC$)”不起作用。你能帮我解决这个麻烦吗?
@Bean
@ServiceActivator(inputChannel = "fetch")
public FtpOutboundGateway gateway() {
FtpOutboundGateway gateway = new FtpOutboundGateway(sessionFactory(), "mget", "payload");
gateway.setOptions("-R");
gateway.setLocalDirectory(new File("/local/dir"));
gateway.setFilter(new FtpSimplePatternFileListFilter("^(?!.DOC$)"));
gateway.setRemoteDirectoryExpression(new LiteralExpression("/remote/dir"));
return gateway;
}
问题出在正则表达式上。你的只会拒绝以任何字符开头并以“DOC”结尾(区分大小写)的 4 字符长字符串。
这将实现你想要的:
^.*(?<!(\.doc|\.DOC))$
让我们看看它的作用:
.*
匹配任何长度的任何字符序列。(\.doc|\.DOC)
将在文件名末尾查找 .doc
或 .DOC
。请注意 \.
,它的意思是字面的 .
字符。默认情况下 .
表示正则表达式中的“任何字符”,因此必须使用反斜杠进行转义。(?<! ... )
放在 $
之前是行尾的负向后查找,因此它仅拒绝没有该扩展名的文件。