我需要一个.hgdontignore文件:-)包含某些文件并排除目录中的所有其他内容。基本上我想只在特定目录中包含.jar文件而不包含任何其他内容。我怎样才能做到这一点?我不熟悉正则表达式语法。或者我可以使用glob语法吗? (我更喜欢可读性)
就像示例位置一样,我想要排除foo/bar/
以外的所有文件,foo/bar/*.jar
除外。
答案 0 :(得分:42)
Michael的答案很好,但另一种选择是排除:
foo/bar/**
然后手动添加.jar文件。您始终可以添加被忽略规则排除的文件,并覆盖忽略。您只需记住添加您将来创建的任何罐子。
答案 1 :(得分:37)
为此,您需要使用此正则表达式:
foo/bar/.+?\.(?!jar).+
<强>解释强>
你告诉它要忽略什么,所以这个表达式正在搜索你不想想要的东西。
正则表达式很容易搞砸,所以我强烈建议您使用像Regex Buddy这样的工具来帮助您构建它们。它会将正则表达式分解成简单的英语,这确实有帮助。
修改强>
嘿Jason S,你抓住了我,它确实错过了那些文件。
此更正的正则表达式适用于您列出的每个示例:
foo/bar/(?!.*\.jar$).+
它找到了:
但未找到
新解释
这表示查找“foo / bar /”中的文件,如果有零个或多个字符后跟“.jar”然后再没有其他字符($表示行的末尾)则不匹配,那么,如果情况并非如此,请匹配以下任何字符。
答案 2 :(得分:1)
任何想要使用否定前行(或正则表达式语法中的?!
)或任何类型的反向引用机制的人都应注意,Mercurial将从Google的RE2
退回到Python的{{1} }模块进行匹配。
RE2是一种非回溯引擎,可确保运行时与输入大小成线性关系。如果性能对您很重要,也就是说,如果您的存储库很大,则应考虑使用Re2支持的更简单的模式,这就是为什么我认为solution offered by Ryan。