正则表达式匹配字符串但同时排除某些内容

时间:2014-08-20 20:57:44

标签: regex string

我想尽量简明扼要地问这个问题,请原谅我,如果我要留下一些东西。我希望表达式匹配所有情况,除非存在确切的文件名字符串。

我使用的备份软件使用正则表达式,我想设置一个排除项以跳过所有特定的文件扩展名类型,但我需要备份某些文件,所以我不想要它们匹配。

我要排除的文件是我们在这个例子中说的。* FLV

(?i).*\.flv

我想在备份中包含三个文件:abc123.flv,ghk432.flv和fdw917.flv

这就是我遇到麻烦的地方,即使只包含三个要包含在备份中的文件

(?i).*\.flv^(?!(abc123\.flv))&

该表达式被添加到code42 CrashPlan备份的排除列表中,遗憾的是它们的支持无法帮助处理复杂的RegEx表达式。

我能提供的最接近的例子是他们的示例3:使用排除包括:

.*/Documents/((?!(.*\.(doc|rtf)|.*/)$).)*$

http://support.code42.com/Administrator/3.6_And_4.0/Configuring/Using_Include_And_Exclude_Filters

但是它排除了名为" Documents"的目录中的所有文件。并包含doc或rtf文件扩展名的那些文件夹中的所有文件。我试图创建一个使用文件扩展名的表达式,而不管文件夹位置如何。

在我的大脑逻辑上似乎我需要把它写成某种其他语句,但正则表达式不是我的强项。

2 个答案:

答案 0 :(得分:0)

尝试将否定前瞻放在路径中文件名的位置:

^([^/]*/)*(?!(abc123|ghk432|fdw917)\.flv$)[^/]*\.flv$

答案 1 :(得分:0)

使用锚定的负面向前看,替换要保留的文件:

^(?i)(?!.*(abc123|ghk432|fdw917)\.flv).*\.flv

否定前瞻断言以下输入与其正则表达式匹配,而管道字符表示"或"。